poj2524 Ubiquitous Religions
2016-04-29 16:55
309 查看
题目链接:http://poj.org/problem?id=2524
这题是求联通块。我们可以用并查集来做。不过要记得合并的时候要有序的合并,然后在枚举父亲节点,看看有多少点是在该点管辖下。然后再标记起来就ok啦~
不过在写find函数的时候顺带把路径也压缩压缩。不然会TLE ==
这题是求联通块。我们可以用并查集来做。不过要记得合并的时候要有序的合并,然后在枚举父亲节点,看看有多少点是在该点管辖下。然后再标记起来就ok啦~
不过在写find函数的时候顺带把路径也压缩压缩。不然会TLE ==
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; const int N=55000; int f ; int vis ; int n; void init() { for(int i=1;i<=n;i++) f[i]=i; } int find(int x) { return f[x]==x?x:f[x]=find(f[x]); } int main() { int m; int cnt=0; while(scanf("%d %d",&n,&m)!=EOF) { if(n==0&&m==0) break; init(); memset(vis,0,sizeof(vis)); for(int i=0;i<m;i++) { int u,v; scanf("%d %d",&u,&v); int x=find(u); int y=find(v); if(x!=y) { if(x>y) f[x]=y; else f[y]=x; } } int ans=0; for(int i=1;i<=n;i++) { if(vis[i]) continue; for(int j=i+1;j<=n;j++) { if(find(j)==i) vis[j]=1; } ans++; } printf("Case %d: %d\n",++cnt,ans); } return 0; }
相关文章推荐
- 初学ACM - 组合数学基础题目PKU 1833
- POJ ACM 1001
- POJ ACM 1002
- 1611:The Suspects
- POJ1089 区间合并
- POJ 2635 The Embarrassed Cryptographe
- POJ 3292 Semi-prime H-numbers
- POJ 2773 HAPPY 2006
- POJ 3090 Visible Lattice Points
- POJ-2409-Let it Bead&&NYOJ-280-LK的项链
- POJ-1695-Magazine Delivery-dp
- POJ1523 SPF dfs
- POJ-1001 求高精度幂-大数乘法系列
- POJ-1003 Hangover
- POJ-1004 Financial Management
- POJ1050 最大子矩阵和
- 用单调栈解决最大连续矩形面积问题
- 2632 Crashing Robots的解决方法
- 1573 Robot Motion (简单题)
- POJ——3253 Fence Repair