poj2236 Wireless Network 简单并查集
2017-03-15 15:03
417 查看
题意:有若干台坏的电脑,每个电脑有一个坐标位置,并且在修好后可以与和其距离小于等于d的电脑联系,两台电脑间也可以通过其他电脑间接联系,输入‘O’(此为字母O,刚开始看成数字‘0’,改了好久才发现)后再输入数字即为修复该电脑,输入‘S’后再输入两个数字即为测试该两台电脑是否可以进行联系。
建立N并查集,当修复了某一台电脑后用新的结构体记录,编号设为x,并对之前修复过的电脑循环操作,某一次编号为y,若该两台电脑间距离小于等于d,则将并查集中x和y连接.
当测试编号为a,b的时候,就对并查集中a和b是否连接进行判断并进行输出。
建立N并查集,当修复了某一台电脑后用新的结构体记录,编号设为x,并对之前修复过的电脑循环操作,某一次编号为y,若该两台电脑间距离小于等于d,则将并查集中x和y连接.
当测试编号为a,b的时候,就对并查集中a和b是否连接进行判断并进行输出。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<cmath> #include<set> #include<bitset> #include<map> #include<stack> #include<queue> #include<vector> #include<utility> #define INF 1000000007 #define inf 100000000000000000 using namespace std; typedef long long ll; int far[1005],ran[1005],n,d,p,q,i,j,numrep=0; char c; void init(int n) { for(int i=1;i<=n;i++) { far[i]=i;ran[i]=0; } } int findx(int k) { if(far[k]==k)return k; return far[k]=findx(far[k]); } void unite(int x,int y) { x=findx(x);y=findx(y); if(x==y)return ; if(ran[x]<ran[y])far[x]=y; else { far[y]=x; if(ran[x]==ran[y])ran[x]++; } } bool same(int x,int y) { return findx(x)==findx(y); } struct node { int x,y,numb; }com[1005],rep[1005]; double dis(node a,node b) { return sqrt((a.x-b.x)*(a.x-b.x)*1.0+(a.y-b.y)*(a.y-b.y)*1.0); } int main() { scanf("%d%d",&n,&d); init(n); for(i=0;i<n;i++) { scanf("%d%d",&com[i].x,&com[i].y); com[i].numb=i; } while(scanf("\n%c",&c)!=EOF) { if(c=='O') { scanf("%d",&p); for(i=0;i<numrep;i++) { if(dis(rep[i],com[p-1])<=d) { unite(rep[i].numb,p-1); } } rep[numrep++]=com[p-1]; } else if(c=='S') { scanf("%d%d",&p,&q); if(same(p-1,q-1))printf("SUCCESS\n"); else printf("FAIL\n"); } } return 0; }
相关文章推荐
- POJ 2236 (简单并查集) Wireless Network
- POJ - 2236 简单的并查集
- POJ 2236 Wireless Network 简单并查集
- POJ - 2236 Wireless Network(简单并查集)
- POJ 2236 Wireless Network 【并查集的简单应用 判断是否在同一连通分量】
- Poj(2236),简单并查集
- POJ 2236 Wireless Network(简单并查集)
- POJ 2236 Wireless Network 【并查集的简单应用 判断是否在同一连通分量】
- poj 2236 Wireless Network (简单的并查集应用)
- POJ 8道简单的并查集 秒光了所有已知的简单并查集,总结一下,共8道。
- poj 1611(简单并查集的变形)
- POJ 2236 Wireless Network 并查集
- POJ2236 Wireless Network [并查集]
- poj 1611 The Suspects 初级->数据结构->简单并查集的应用
- POJ-2236 并查集
- POJ 1988 Cube Stacking【并查集的简单应用 堆木块】
- POJ 2236 Wireless Network(并查集)
- POJ---2524 Ubiquitous Religions[简单并查集]
- POJ 2236 Wireless Network (并查集)
- poj 2236 Wireless Network (并查集)