CF982C Cut 'em all!
Posted 王宜鸣
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF982C Cut 'em all!相关的知识,希望对你有一定的参考价值。
思路:
在深搜过程中,贪心地把树划分成若干个连通分支就可以了。划分的条件是某个子树有偶数个节点。注意到在一次划分之后并不需要重新计数,因为一个数加上一个偶数并不影响这个数的奇偶性。
实现:
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int MAXN = 100005; 4 vector<int> G[MAXN]; 5 bool vis[MAXN]; 6 int ans = 0; 7 int dfs(int u) 8 { 9 vis[u] = true; 10 int cnt = 0; 11 for (int i = 0; i < G[u].size(); i++) 12 { 13 int tmp = G[u][i]; 14 if (!vis[tmp]) cnt += dfs(tmp); 15 } 16 if (cnt & 1) ans++; 17 return cnt + 1; 18 } 19 int main() 20 { 21 int n, x, y; 22 while (cin >> n) 23 { 24 for (int i = 1; i <= n; i++) G[i].clear(); 25 memset(vis, 0, sizeof vis); 26 ans = 0; 27 for (int i = 0; i < n - 1; i++) 28 { 29 cin >> x >> y; 30 G[x].push_back(y); 31 G[y].push_back(x); 32 } 33 if (n & 1) { cout << -1 << endl; continue; } 34 dfs(1); 35 cout << ans - 1 << endl; 36 } 37 return 0; 38 }
以上是关于CF982C Cut 'em all!的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces --- 982C Cut 'em all! DFS加贪心
Codeforces 982 C. Cut 'em all!(dfs)
linux cut: invalid byte, character or field list Try 'cut --help' for more information.(示例代