poj2236
来源:互联网 发布:mysql的端口号 编辑:程序博客网 时间:2024/05/16 10:13
链接:点击打开链接
题意:有N台坏的电脑,两台电脑之间距离必须小于等于d才能通信,如果A和B能通信,B和C能通信则,A和C也能通信,以此类推,给出N台电脑的坐标,然后给出一些操作,有两种形式分别是"O p":代表修好了第p台电脑,"S p q":代表询问第p台电脑和第q台电脑是否可以通信,如果可以输出"SUCCESS",否则输出"FAIL"
代码:
#include <queue>#include <cstdio>#include <cstring>#include <stdlib.h>#include <iostream>#include <algorithm>using namespace std;int N,d;int par[1005],rank[2005];void init(int n){ int i; for(i=0;i<=n;i++){ par[i]=i; rank[i]=0; }}int find(int x){ if(par[x]==x) return x; 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]++; }}bool same(int x,int y){ return find(x)==find(y);} //并查集模板struct node{ int x,y,id;};int cal(node a,node b){ return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);}vector<node> v;node s[1005];int main(){ int i,j,st,en,num; char c; scanf("%d%d",&N,&d); init(N); for(i=1;i<=N;i++){ scanf("%d%d",&s[i].x,&s[i].y); s[i].id=i; } while(scanf(" %c",&c)!=EOF){ //用空格%c吃回车 if(c=='O'){ scanf("%d",&num); for(i=0;i<v.size();i++) if(cal(s[v[i].id],s[num])<=d*d) unite(v[i].id,num); //距离小于d的连上 v.push_back(s[num]); //用vector记录修好的电脑 } else{ scanf("%d%d",&st,&en); if(same(st,en)) puts("SUCCESS"); else puts("FAIL"); } } return 0;}
0 0
- poj2236
- poj2236
- POJ2236
- poj2236
- poj2236 并查集
- poj2236并查集
- poj2236解题报告
- POJ2236 Wireless Network
- poj2236 并查集
- poj2236 - Wireless Network
- poj2236 Wireless Network
- poj2236(并查集)
- POJ2236(并查集)
- 并查集-poj2236
- poj2236 并查集
- POJ2236 Wireless Network
- POJ2236 Wireless Network
- poj2236 Wireless Network
- JDK8新特性
- 一些编译错误的集合
- Scala学习第十八天 文件的读取、写入、控制台输入操作代码实战
- Android 显示Gif动态图和静态图
- 发布项目,Upload AppStore解决ITMS-90096问题
- poj2236
- AFNetworking 实现下载功能(总结)
- 计算机技术领域当前的主流技术及其社会需求调查报告
- WIN7 64位系统安装JDK并配置环境变量
- 报表工具的动态数据源实现
- C#API service EF 打印出DB查询语句
- CSS实现父层透明,子层不透明
- 【DB】对数据的操作
- Python 获取当前时间