poj 2236 Wireless Network (并查集)
2011-01-05 17:56
429 查看
弄了一下午,终于把这个也弄AC了。
刚开始想修好一个后和已知的循环求距离然后合并,一想担心时间肯定不够,然后又看了网上的阶梯报告,结果就是这样,悲哀呀 (ˇˍˇ) 回头一看题目时间是10000MS。。。
刚开始想修好一个后和已知的循环求距离然后合并,一想担心时间肯定不够,然后又看了网上的阶梯报告,结果就是这样,悲哀呀 (ˇˍˇ) 回头一看题目时间是10000MS。。。
#include "iostream" #include "stdio.h" #include "cmath" using namespace std; struct point { unsigned int x,y; int set; }r[1003]; int make(int n) { int i; for(i=0; i<=n; i++) r[i].set=i; } int find(int x) { if(x!=r[x].set) r[x].set=find(r[x].set); return r[x].set; } int Union(int rx,int ry) { if(rx==ry) return 0; r[ry].set=rx; } int main() { int i,j,x,y,e,oc,m,d,n; int a,b,rx,ry; double dis; int hasre[1003]; char c; scanf("%d%d",&n,&d); make(n); for(e=1; e<=n; e++) scanf("%d%d",&r[e].x,&r[e].y); oc=1; while(scanf("/n%c %d",&c,&a)!=EOF) { if(c=='O') { hasre[oc++]=a; for(j=1; j<oc; j++) { dis=(r[hasre[j]].x-r[a].x)*(r[hasre[j]].x-r[a].x)+ (r[hasre[j]].y-r[a].y)*(r[hasre[j]].y-r[a].y); // cout<<"dis="<<dis<<endl; if(dis<=d*d) { rx=find(a); ry=find(hasre[j]); Union(rx,ry); } } } else { scanf("%d",&b); rx=find(a); ry=find(b); if(rx==ry) printf("SUCCESS/n"); else printf("FAIL/n"); } } system("pause"); return 0; }
相关文章推荐
- poj 2236 并查集(修电脑,使两两互联)
- poj 2236 Wireless Network 并查集
- pku 2236 poj 并查集一般题
- POJ 2236 Wireless Network (并查集)
- POJ 2236--Wireless Network【并查集】
- POJ 2236 Wireless Network 并查集
- pku 2236 poj 并查集一般题
- POJ 2236 Wireless Network(并查集)
- POJ-2236 Wireless Network 并查集
- POJ 2236 Wireless Network(并查集)
- POJ 2236 Wireless Network 并查集
- [kuangbin带你飞]专题五 并查集 A POJ 2236
- poj 2236 Wireless Network(并查集)
- POJ 2236 Wireless Network 并查集
- POJ 2236 Wireless Network(并查集加判断)
- POJ 2236 Wireless Network(并查集)
- POJ 2236 Wireless Network(并查集)#by zh
- 《挑战程序设计竞赛》2.4 数据结构-并查集 POJ1182 2236 1703 AOJ2170
- POJ-2236-Wireless Network(并查集)
- 并查集 POJ 2236