pku 2236 poj 并查集一般题
2013-08-19 18:44
281 查看
有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 ——并查集
- 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(并查集)
- 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 几何+并查集
- poj 2236 并查集水题
- POJ - 2236 Wireless Network(简单并查集)
- POJ-2236 Wireless Network(并查集)
- POJ 2236 并查集