zoukankan      html  css  js  c++  java
  • codeforces 982C Cut 'em all!

    题意:

    给出一棵树,问最多去掉多少条边之后,剩下的连通分量的size都是偶数。

    思路:

    如果本来就是奇数个点,那么无论去掉多少条边都不可能成立的。

    如果是偶数个点,就进行一次dfs,假设一个点的父亲是u,儿子是v,那么可以去掉(u,v)的条件就是v及其子树有偶数个点,任何一条这样的边都是可以去掉的。

    所以一边dfs,一边统计答案就可以了。

    代码:

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <algorithm>
     4 #include <set>
     5 #include <map>
     6 #include <vector>
     7 using namespace std;
     8 const int N = 1e5 + 10;
     9 vector<int> g[N];
    10 int ans = 0;
    11 int cnt[N];
    12 int dfs(int u,int fa)
    13 {
    14     int ret = 0;
    15     for (int v:g[u])
    16     {
    17         if (v != fa)
    18         {
    19             int tmp = dfs(v,u);
    20             if (tmp % 2 == 0) ans++;
    21             ret += tmp;
    22         }
    23     }
    24     return ret + 1;
    25 }
    26 int main()
    27 {
    28     int n;
    29     scanf("%d",&n);
    30     if (n & 1)
    31     {
    32         printf("-1
    ");
    33         return 0;
    34     }
    35     for (int i = 1;i < n;i++)
    36     {
    37         int x,y;
    38         scanf("%d%d",&x,&y);
    39         g[x].push_back(y);
    40         g[y].push_back(x);
    41     }
    42     dfs(1,-1);
    43     printf("%d
    ",ans);
    44     return 0;
    45 }
  • 相关阅读:
    二叉排序树的建立_查找_插入_删除
    java学习书籍推荐
    Java之路——敬JAVA初学者(作者:MoMo)
    结构体的定义及应用
    java获取缓存通用类
    金额转换为自定义字符串
    WebApi接入Swagger
    webApi的控制台服务
    自动生成缓存Key值的CacheKeyHelper
    DictionaryHelper2
  • 原文地址:https://www.cnblogs.com/kickit/p/9054233.html
Copyright © 2011-2022 走看看