poj2236 Wireless Network
来源:互联网 发布:mac可以玩qq堂吗 编辑:程序博客网 时间:2024/05/21 07:50
题目链接:http://poj.org/problem?id=2236
题意:有n台电脑,当电脑相互之间的距离小于d,才能进行通讯,现在有两种操作,O x表示,打开第x台电脑的电源,S x y,表示询问x和y台电脑之间能否通讯
解析:并查集,因为只有打开电源才有通讯的道理,所以每次做O操作的时候,才做合并操作,然后每次询问,就相当于询问是否在同一个集合里
#include <iostream>#include <algorithm>#include <cstdio>using namespace std;const int maxn = 1e5+100;int x[maxn],y[maxn];int fa[maxn];int vis[maxn];int dis(int x1,int y1,int x2,int y2){ return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);}int getfa(int x){ if(fa[x]==x) return fa[x]; return fa[x] = getfa(fa[x]);}void merge(int u,int v){ int t1 = getfa(u); int t2 = getfa(v); if(t1!=t2) fa[t1] = t2;}int main(void){ int n,d; scanf("%d %d",&n,&d); for(int i=1;i<=n;i++) { scanf("%d %d",&x[i],&y[i]); fa[i] = i; } char op; int t1,t2; while(cin>>op>>t1) { if(op=='O') { vis[t1] = 1; for(int i=1;i<=n;i++) { if(vis[i] && dis(x[i],y[i],x[t1],y[t1])<=d*d) merge(i,t1); } } else { scanf("%d",&t2); if(getfa(t1)!=getfa(t2)) puts("FAIL"); else puts("SUCCESS"); } } return 0;}
阅读全文
0 0
- POJ2236 Wireless Network
- poj2236 - Wireless Network
- poj2236 Wireless Network
- POJ2236 Wireless Network
- POJ2236 Wireless Network
- poj2236 Wireless Network
- POJ2236---Wireless Network
- POJ2236--Wireless Network
- poj2236 Wireless Network
- poj2236 Wireless Network
- POJ2236-Wireless Network
- POJ2236(Wireless Network)
- POJ2236 Wireless Network
- poj2236 Wireless Network
- POJ2236 Wireless Network
- poj2236 Wireless Network
- poj2236 Wireless Network
- POJ2236——Wireless Network
- 加密证书
- 求最大子矩阵的大小——C++实现
- QSS界面美化5
- SCAUOJ——18100-奇怪的光照植物
- 动态规划-279. Perfect Squares
- poj2236 Wireless Network
- 1049. 数列的片段和(20)
- 沿着循环路线有N个加油站,其中i站的天然气量是[i]。你有一辆带有无限气罐的汽车,并且它的费用是从i站到我的下一站(i + 1).如果您可以绕电路行驶一次,则返回起始站索引
- C++——USACO Section 3.2 题解
- QSS界面美化6
- enum
- QSS界面美化7
- 获取数据自动插入列
- 《Python学习手册》学习笔记(12)之第12章if测试和语法规则(关键词:编程语言/Python/if)