POJ 2236
来源:互联网 发布:淘宝助理导出宝贝详情 编辑:程序博客网 时间:2024/06/14 05:32
并查集的应用。
#include<cstdio>#include<iostream>using namespace std;struct type{int x,y;//电脑的坐标bool state;//电脑是否已修复,已修复为1,未修复为0}c[1005];int par[1005],rank[1005],n,d;void init(int n){for(int i=1;i<=n;i++){par[i]=i,rank[i]=0;c[i].state=0;}}int find(int x){if(par[x] == x) return x;else return( par[x] = find(par[x]) );}void unite(int x,int y){x=find(x),y=find(y);if(x == y) return;if(rank[x] < rank[y]) par[x]=y;else{par[y]=x;if(rank[x] == rank[y]) rank[x]++;}}double dist2(type a,type b)//返回两台电脑的距离的平方{return( (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y) );}bool same(int x,int y){return( find(x) == find(y) );}int main(){char op;scanf("%d%d",&n,&d);init(n);//初始化n台电脑for(int i=1;i<=n;i++) scanf("%d%d",&c[i].x,&c[i].y);while(cin>>op){if(op == 'O'){int Num;scanf("%d",&Num);c[Num].state=1;for(int i=1;i<=n;i++)//遍历每台电脑,对于某台电脑c[i]……{if(i == Num) continue;if(c[i].state && dist2(c[i],c[Num]) <= d*d) unite(i,Num);//如果c[i]是已修复的,并且与当前修复这台电脑c[Num]距离小于d,就归入一组}}else if(op == 'S'){int test1,test2;scanf("%d%d",&test1,&test2);if(same(test1,test2)) printf("SUCCESS\n");//在同一组内,就可以成功通信else printf("FAIL\n");//否则就无法通信}}}
0 0
- poj 2236
- poj 2236
- POJ 2236
- POJ 2236
- POJ 2236
- poj-2236
- poj 2236
- POJ 2236
- POJ 2236
- POJ 2236
- POJ 2236
- poj 2236
- POJ 2236
- POJ 2236
- POJ 2236
- 【POJ】2236
- POJ 2236
- poj 2236
- 设计模式之建造者模式
- Json的使用
- Jira6.3.6 Installation
- 设置字体
- 二叉搜索树的后序遍历序列
- POJ 2236
- HashMap详解
- Unity相机视野的缩放,旋转及跟随
- HTML基础知识点总结
- JZOJ 4.1 B组 删数
- poj 2912(并查集,食物链)
- centOS_7_新特性
- hadoop中文wordcount无结果输出
- 特别完善的面试知识总结