• hdu 4714(树形dp)


    题目链接: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
    ",ans*2+1);
    47     }
    48     return 0;
    49 }
    View Code
  • 相关阅读:
    IOS之UIKit_Day13
    IOS之UIKit_Day12
    IOS之UIKit_Day11
    IOS之UIKit_Day10
    iOS设计模式之工厂模式
    常用操作
    盒子模式
    block循环使用问题
    IOS-sqlite3
    IOS-View用作控制器
  • 原文地址:https://www.cnblogs.com/wally/p/3308819.html
Copyright © 2020-2023  润新知