hdu 4714(树形dp)
来源:互联网 发布:linux多线程编程 书籍 编辑:程序博客网 时间:2024/06/07 01:20
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4714
思路:其实就是求树的分支数,然后就是分支数*2+1(要删边,加边变成直线最后在成环)。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<vector> 6 using namespace std; 7 #define MAXN 1000100 8 #pragma comment(linker, "/STACK:1024000000,1024000000") 9 10 int n,ans;11 vector<vector<int> >G;12 13 int dfs(int u,int father)14 {15 int tmp=0; //计算分支数,大于等于2时有分支。16 for(int i=0;i<G[u].size();i++){17 int v=G[u][i];18 if(v==father)continue;19 tmp+=dfs(v,u);20 }21 if(tmp>=2){22 if(u==1){ //如果是根节点的话,那么其有两条边在同一分支上。23 ans+=tmp-2;24 }else 25 ans+=tmp-1;//否则就是只能选择一条边在一个分支上26 return 0;27 }else 28 return 1;29 }30 31 int main()32 {33 int _case,u,v;34 scanf("%d",&_case);35 while(_case--){36 scanf("%d",&n);37 G.clear();38 G.resize(n+2);39 for(int i=1;i<n;i++){40 scanf("%d%d",&u,&v);41 G[u].push_back(v);42 G[v].push_back(u);43 }44 ans=0;45 dfs(1,-1);46 printf("%d\n",ans*2+1);47 }48 return 0;49 }
0 0
- hdu 4714 (树形dp)
- hdu 4714 (树形dp)
- hdu 4714(树形dp)
- HDU-4714-树形dp
- 树形dp-hdu-4714-Tree2cycle
- hdu 4714 Tree2cycle (树形dp)
- HDU 4714 Tree2cycle(树形dp)
- HDU 4714 Tree2cycle (构造,树形DP)
- 树形dp hdu Computer
- 【树形DP】hdu 1520
- hdu 1054 #树形DP
- hdu 4303 树形dp
- hdu 4340 树形dp
- hdu 4340 树形DP
- HDU 4340 树形DP
- hdu 4267 树形dp
- hdu 4383 树形dp
- HDU 2196 树形dp
- hdu 1011(树形dp)
- hdu 2412(树形dp)
- hdu 4715(打表)
- hdu 4708(暴力+找规律)
- hdu 3905(dp)
- hdu 4714(树形dp)
- hdu 3899(树形dp)
- hdu 4003(树形dp)
- hdu 2196(求树上每个节点到树上其他节点的最远距离)
- hdu 2809(状压dp)
- hdu 1561(树形dp)
- hdu 1520(简单树形dp)
- hdu 1513(dp+滚动数组)
- hdu 4240在(最大流)