现在的位置: 首页 > 综合 > 正文

poj2236 Wireless Network

2013年09月14日 ⁄ 综合 ⁄ 共 918字 ⁄ 字号 评论关闭
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
struct cell{
	bool set;
	int x;int y;
}a[1010];
bool vis[1010][1010];
int root[1010];
int n,d;
bool dis(cell a,cell b){
	if((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)<=d*d)
		return 1;
	else
		return 0;
}
int find(int c){
	if(c!=root[c])
		root[c]=find(root[c]);
	return root[c];
}
void check(int a,int b){
	int ra=find(a);
	int rb=find(b);
	root[ra]=rb;
}
int main(){
	int i,j;
	char ope[5];
	int com;
	int from,to;
	while(scanf("%d%d",&n,&d)!=EOF){
		for(i=1;i<=n;i++){
			root[i]=i;
			a[i].set=0;
		}
		memset(vis,0,sizeof(vis));
		for(i=1;i<=n;i++)
			scanf("%d%d",&a[i].x,&a[i].y);
		for(i=1;i<=n;i++)
			for(j=1;j<=n;j++)
				vis[i][j]=vis[j][i]=dis(a[i],a[j]);
		while(scanf("%s",ope)!=EOF){   //我真的很菜,scanf("%c")不能用在这里
			if(ope[0]=='O'){
				scanf("%d",&com);
				a[com].set=1;
				for(i=1;i<=n;i++){
					if(i==com) continue;
					if(vis[i][com]&&a[i].set)
						check(i,com);
				}
			}
			if(ope[0]=='S'){
				scanf("%d%d",&from,&to);
				if(find(from)==find(to))
					printf("SUCCESS\n");
				else
					printf("FAIL\n");
			}
		}
	}
	return 0;
}

【上篇】
【下篇】

抱歉!评论已关闭.