Codeforces 219D Choosing Capital for Treeland DP(Tree)
来源:互联网 发布:我的世界,java.net 编辑:程序博客网 时间:2024/06/05 16:40
题意:n个点n-1条有向边,f[x]为把x点设为首都的代价即:要反转多少条边 使得x能达到任意一个城市.
n<=2e5,求出最小代价及相应的点集.
标记边方向后 建立有根无向的树,dfs算出f[1],
n<=2e5,求出最小代价及相应的点集.
标记边方向后 建立有根无向的树,dfs算出f[1],
因为fa,u的f值只差(fa,u)这条边的方向,所以fa和son的f值相差正负1,自顶向下DP一次即可
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N=4e5+20;map<int,int> mp[N];vector<int> e[N];int f[N];void dfs(int u,int fa){f[u]=0;for(int i=0;i<e[u].size();i++){int v=e[u][i];if(v==fa)continue;dfs(v,u);f[u]+=f[v];if(mp[u][v]==0)f[u]++;}}void dfs2(int u,int fa){for(int i=0;i<e[u].size();i++){int v=e[u][i];if(v==fa)continue;if(mp[u][v])f[v]=f[u]+1;elsef[v]=f[u]-1;dfs2(v,u);}}int main(){int n;while(cin>>n){int u,v;for(int i=1;i<=n-1;i++){scanf("%d%d",&u,&v);mp[u][v]=1;e[u].push_back(v);e[v].push_back(u);}dfs(1,0);dfs2(1,0);int mn=2e5;for(int i=1;i<=n;i++)mn=min(mn,f[i]),e[i].clear(),mp[i].clear();cout<<mn<<endl;for(int i=1;i<=n;i++)if(f[i]==mn)printf("%d ",i);printf("\n");}return 0;}
阅读全文
0 0
- Codeforces 219D Choosing Capital for Treeland DP(Tree)
- codeforces 219D D. Choosing Capital for Treeland(树形dp)
- CodeForces 219D Choosing Capital for Treeland (树形dp)
- CodeForces 219D Choosing Capital for Treeland | 树形dp
- Codeforces 219D - Choosing Capital for Treeland(树形dp)
- codeforces 219D Choosing Capital for Treeland(树形DP)
- CodeForces 219D Choosing Capital for Treeland (树形DP)
- CodeForces 219D-H - Choosing Capital for Treeland-树DP
- CodeForces 219D Choosing Capital for Treeland(树形DP)
- codeforces 219D Choosing Capital for Treeland (树形dp)
- 【树形DP】codeforces 219D Choosing Capital for Treeland
- Codeforces 219D Choosing Capital for Treeland 树型DP
- Codeforces 219D Choosing Capital for Treeland【思维+树型Dp】
- CodeForces 219D Choosing Capital for Treeland
- codeforces 218D Choosing Capital for Treeland 树形DP
- 树形dp 219D Choosing Capital for Treeland
- [CF 219D]Choosing Capital for Treeland[树形DP]
- cf 219D Choosing Capital for Treeland 树形dp
- ubuntu vi, vim 编辑器的使用
- 在try,catch,finally中return,throw覆盖的问题总结
- linux中fork()函数详解(原创!!实例讲解)
- eclipse代码自动补全
- 数学之路(2)-数据分析-R基础(1)
- Codeforces 219D Choosing Capital for Treeland DP(Tree)
- 数组做为参数传入Oracle存储过程操作数据库
- 让时间处理简单化 【第三方扩展类库org.apache.commons.lang.time】
- WPF控件之RichTextbox
- centos7 查看.so导出函数
- css3 实现十字光标和光标外圆圈环绕
- 合理的电梯(水题 杭电排位赛-6)
- OpenCV3.2.0官网中文教程-索引
- 【备忘】2017新东方日语初级+中级+高级 高清视频【完整版无加密】