Time Limit: 10000MS | Memory Limit: 65536K | |
Total Submissions: 25022 | Accepted: 10399 |
Description
Input
Output
Sample Input
4 1 0 1 0 2 0 3 0 4 O 1 O 2 O 4 S 1 4 O 3 S 1 4
Sample Output
FAIL SUCCESS
Source
#include<stdio.h> #include<string.h> #include<math.h> #define dist(x1,y1,x2,y2) (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2) int father[10050],n,d; bool ingragh[10050]; struct node { int x,y; }node[10050]; int find(int x) { if(x==father[x]) return (x); else father[x]=find(father[x]); return (father[x]); } void merge(int x,int y) { int find_x=find(x); int find_y=find(y); if(find_x!=find_y&&dist(node[x].x,node[x].y,node[y].x,node[y].y)<=d*d) father[find_x]=find_y; return; } void init() { int i; for(i=1;i<=n;++i) father[i]=i; memset(ingragh,false,sizeof(ingragh)); } int main() { int i,query1,query2; char c; scanf("%d%d",&n,&d); init(); for(i=1;i<=n;++i) scanf("%d%d",&node[i].x,&node[i].y); while(~scanf("%c%d",&c,&query1)) { if(c==‘O‘) { for(i=1;i<=n;++i) if(ingragh[i]) merge(i,query1); ingragh[query1]=true; } else if(c==‘S‘) { scanf("%d",&query2); if(ingragh[query1]&&ingragh[query2]) { if(find(query1)==find(query2)) { printf("SUCCESS\n"); continue; } } printf("FAIL\n"); } } return 0; }
[并查集] POJ 2236 Wireless Network
原文:http://www.cnblogs.com/fuermowei-sw/p/6187862.html