URAL1389. Roadworks(dp)
2024-08-30 19:13:25
算个简单的树形DP吧 不知道是不是数据太水 竟然一A了
就是对于当前节点有没有被选中就行选最优 有没有被选中的意思是有没有与它相连的边被选中
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<vector>
#include<cmath>
using namespace std;
#define N 100010
vector<int>d[N];
int dp[N][],g;
struct node
{
int u,v;
}p[N];
int dfs(int u,int v,int f)
{
if(dp[v][f]!=-)
return dp[v][f];
int i;
int s[][] = {};
int flag =,x=-;
for(i = ; i < d[v].size() ; i++)
{
int tv = d[v][i];
if(tv==u) continue;
flag = ;
int s1 = dfs(v,tv,);
if(f)
{
s[(i+)%][] = s[i%][]+s1;
}
else
{
int s2 = dfs(v,tv,)+;
s[(i+)%][] = s[i%][]+s1;
if(s[i%][]+s1<s[i%][]+s2)
{
s[(i+)%][] = s[i%][]+s2;
x = tv;
}
else
s[(i+)%][] = s[i%][]+s1;
}
}
if(!flag)
{
return dp[v][f] = ;
}
if(x!=-)
{
g++;
p[g].u = v;
p[g].v = x;
}
int maxz = ;
for(i = ; i < ; i++)
maxz = max(maxz,max(s[][i],s[][i]));
return dp[v][f] = maxz;
}
int main()
{
int i,n,m;
while(cin>>n>>m)
{
memset(dp,-,sizeof(dp));
for(i = ; i <= n ;i++)
d[i].clear();
for(i = ; i <= m ;i++)
{
int u,v;
cin>>u>>v;
d[u].push_back(v);
d[v].push_back(u);
}
dfs(-,,);
cout<<dp[][]<<endl;
for(i = ; i <= g ; i++)
cout<<p[i].u<<" "<<p[i].v<<endl;
}
return ;
}
最新文章
- MySql: 常见错误
- JS运动基础(三) 弹性运动
- 通用窗口类 Inventory Pro 2.1.2 Demo1(下)
- spring mvc如何获取问号后的url参数
- JS模板引擎 :ArtTemplate (1)
- LNK1169 和 LNK2005
- 类加载器classCloader
- feof()和EOF的用法(转载)
- Linux命令 文件的建立移动删除
- sql in 和 exist的区别
- Swagger入门教程
- Win10电脑经常自动掉线、自动断网的解决方法
- MySQL存储过程--(1)
- [Swift]LeetCode247.对称数 II $ Strobogrammatic Number II
- 看到一个简单的背单词java程序的设计,收藏下
- Linux cp命令详解
- LINUX 手动建立SWAP文件及删除
- 解决jdk1.7,1.8共存问题小思
- Spring Boot 中使用 @ConfigurationProperties 注解
- leetcode 树类型题
热门文章
- Node 即学即用 笔记 思维导图
- python 【第三篇】函数基础
- 嵌入式开发之davinci--- 8168 电源调试总结
- 2016/05/17 thinkphp3.2.2 ① Ajax 使用 ②前端验证
- accept()函数用来告诉Qt,事件处理函数“接收”了这个事件,不要再传递;ignore()函数则告诉Qt,事件处理函数“忽略”了这个事件,需要继续传递(看一下QWidget::mousePressEvent的实现,最为典型。如果希望忽略事件,只要调用父类的响应函数即可)
- mondb08---导入导出
- Ubuntu Bochs boot.asm 测试
- BZOJ_1511_[POI2006]OKR-Periods of Words_KMP
- Oracle VM VirtualBox启动新建虚拟机弹错--不能为虚拟机xxxx电脑 打开一个新任务
- Rails 浅谈 ActiveRecord 的 N + 1 查询问题(copy)