CodeForces 791B Bear and Friendship Condition【并查集】
2017-03-22 13:13
411 查看
题目链接:http://codeforces.com/contest/791/problem/B
题意:给你一个社交网络,问你这个网络是否合法,也就是1认识2,2认识3,1就必须认识3
解析:其实也就给你一个图,如果这个社交网络合法那就是他所有的连通块里的节点个数-1等于连通块里节点的度数
题意:给你一个社交网络,问你这个网络是否合法,也就是1认识2,2认识3,1就必须认识3
解析:其实也就给你一个图,如果这个社交网络合法那就是他所有的连通块里的节点个数-1等于连通块里节点的度数
#include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <iostream> #include <set> using namespace std; const int maxn = 2e5+100; int fa[maxn],cnt[maxn],s[maxn]; void init(int n) { for(int i=0;i<=n;i++) fa[i] = i; memset(cnt,0,sizeof(cnt)); memset(s,0,sizeof(s)); } int getFa(int x) { if(x==fa[x]) return fa[x]; return fa[x] = getFa(fa[x]); } void merge(int u,int v) { int t1 = getFa(u); int t2 = getFa(v); if(t1!=t2) fa[t2] = t1; } int main() { int n,m; scanf("%d %d",&n,&m); int flag = 0; init(n); for(int i=0;i<m;i++) { int a,b; scanf("%d %d",&a,&b); merge(a,b); cnt[a]++; cnt[b]++; } for(int i=1;i<=n;i++) { int tmp = getFa(i); s[tmp]++; } for(int i=1;i<=n;i++) { int t1 = getFa(i); if(s[t1]-1!=cnt[i]) { flag = 1; break; } } if(flag) puts("NO"); else puts("YES"); return 0; }
相关文章推荐
- Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) Problem C (Codeforces 828C) - 链表 - 并查集
- Codeforces 445B DZY Loves Chemistry【并查集】
- CodeForces 217 A.Ice Skating(并查集)
- codeforces 722C. Destroying Array(并查集||set)
- Codeforces 25D Roads not only in Berland(并查集)
- CodeForces - 731C Socks(并查集)(贪心)
- Codeforces 731C Socks(并查集)
- CodeForces - 698B Fix a Tree(并查集)
- Codeforces 455C Civilization 树的直径+并查集
- codeforces 181.div2 300B - Coach 并查集
- 【贪心+并查集】Codeforces 853A Planning
- CodeForces - 731C Socks (并查集)
- 【codeforces 691 D】【并查集 或者 dfs】aps in Permutation【给一个1到N的排列,M个操作,每次可以交换X Y位置上的数字,求可以得到的最大字典序的数列】
- Codeforces 292D (并查集巧妙运用)
- Codeforces 870E 并查集 解题报告
- CodeForces-722C Destroying Array 并查集 离线操作
- CodeForces 722C Destroying Array(并查集和我奇怪的二叉树)
- CodeForces 755C PolandBall and Forest (并查集)
- 【Codeforces 755 C PolandBall and Forest】+ 并查集
- codeforces 593 D. Happy Tree Party (LCA + 并查集)