pku 2236 poj 并查集一般题
2011-09-04 19:02
429 查看
有n台坏掉电脑,有两种操作,O表示修好一台电脑,修好后就可以更新与其它已修好的电脑的关系了,即如果与某台已经修好的电脑在可以连接的范围内,则两台电脑建立联系,另一种操作是询问,直接找根节点就好。。。。是水题啊,不过有一些细节要注意啊。
View Code
啰嗦一句,对知识的理解、领悟是永无止境。
ACM让我们变的更加严谨(不严谨是要付出时间的代价的,时间就是生命哪。。。。),继续努力!!!
View Code
#include<stdio.h> #include<string.h> #define MAX 1050 struct node{ int x,y; }com[MAX]; int fa[MAX],repaired[MAX]; int n,d,tot; void init() { for(int i=1;i<=n;i++) fa[i]=i; } int find(int x) { if(x==fa[x]) return x; return fa[x]=find(fa[x]); } int dis(node a,node b) { return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y); } void unio(int x,int y) { x=find(x); y=find(y); if(x==y) return ; else fa[x]=y; } void update(int x) { for(int i=1;i<=tot;i++) { if(dis(com[repaired[i]],com[x])<=d) unio(x,repaired[i]); } } int main() { int i,p,q; char str[5]; scanf("%d%d",&n,&d);d*=d; tot=1;init(); for(i=1;i<=n;i++) scanf("%d%d",&com[i].x,&com[i].y); while(scanf("%s",str)!=EOF) { if(str[0]=='O') { scanf("%d",&p); repaired[tot++]=p; update(p); } else { scanf("%d%d",&p,&q); int rp=find(p); int rq=find(q); if(rp==rq) printf("SUCCESS\n"); else printf("FAIL\n"); } } return0; }
啰嗦一句,对知识的理解、领悟是永无止境。
ACM让我们变的更加严谨(不严谨是要付出时间的代价的,时间就是生命哪。。。。),继续努力!!!
相关文章推荐
- pku 2236 poj 并查集一般题
- POJ 2236 Wireless Network [并查集] 《挑战程序设计竞赛》2.4
- POJ 2236并查集
- poj2236——Wireless Network(并查集)
- POJ---2236 Wireless Network【并查集】
- POJ-2236 Wireless Network( 并查集 )
- POJ 2236 Wireless Network(并查集)
- poj 2236 Wireless Network 并查集
- [POJ 2236]Wireless Network[并查集]
- poj 2236 Wireless Network(并查集模板题)
- POJ 2236 Wireless Network【并查集】
- Wireless Network (poj 2236 并查集)
- POJ 2236 Wireless Network(并查集)
- poj 2236 Wireless Network(并查集)
- POJ 2236 - Wireless Network(并查集)
- POJ 2236 Wireless Network(并查集)#by zh
- POJ 2236 Wireless Network (并查集)
- POJ – 2236 Wireless Network (并查集)
- POJ---2236-Wireless Network(并查集)
- POJ 2236 Wireless Network(并查集)