poj 2236 Wireless Network(并查集+一点点计算几何)
来源:互联网 发布:在线课堂网站源码 编辑:程序博客网 时间:2024/05/19 19:42
题目链接:http://poj.org/problem?id=2236
题意:地震后网坏掉了,现在修网,O代表的修理网络,S代表的检查连同,如果检查连同就输出“SUCCESS”,如果失败就检查”FAIL”,
输入 第一行 a,b a代表的是总共有多少台电脑,接下来的a行是每个电脑的坐标,b代表的是两个电脑距离多少是连通的。。
之后的s,o就如上述所说。。。
简而言之就是考察连通性。。。我在电脑距离和题目要求距离那里wa了很多次,后发现了原来的距离如果用double型和int 型的 b比较就是坑。可能是sqrt算的有误差吧。。之后改成 int型进行比较就没毛病了。
这题还给我这个弱鸡一个教训,一定要先理清思路,全部的细节再写,不然写完一个想法wa了就白费时间了。qaq
代码:
#include<cstdio>#include<cstring>#include<cmath>using namespace std;const int max=1010;int pa[max],a[max][2],vis[max];inline void init(int n){//初始化 for(int i = 1 ;i <= n; i++) pa[i] = i;}int find( int n ){//查找,递归路径压缩 if(pa[n] != n) pa[n] = find(pa[n]); return pa[n];}void unite( int x , int y ){//放在一颗树里 int fx = find(x); int fy = find(y); if(fx != fy) pa[fy] = fx;}int juli( int m , int j ){ //主要是这块。。变成double型后有误差然后就gg了 int x1 = a[j][0] - a[m][0]; int y1 = a[j][1] - a[m][1]; int D = x1*x1+y1*y1; return D;}int main(){ int f,n,k=0,d; scanf("%d%lf",&n,&d); init(n); memset(vis,0,sizeof(vis)); for(int i = 1 ; i <= n ; i++) scanf("%d%d",&a[i][0],&a[i][1]); getchar(); char c; int m,x,y; while(~scanf("%c",&c)){ if(c == 'O'){ scanf("%d",&m); vis[m] = 1; for(int i=1;i<=n;i++){ if(find(i)==find(m)||vis[i]==0) continue; f=juli(i,m); if(f<=d) unite(m,i); } } else { scanf("%d%d" , &x , &y); if(vis[x] == 0||vis[y] == 0||find(x) != find(y)) printf("FAIL\n"); else printf("SUCCESS\n"); }getchar(); } return 0;}
阅读全文
1 0
- poj 2236 Wireless Network(并查集+一点点计算几何)
- POJ 2236 Wireless Network 几何+并查集
- POJ 2236 Wireless Network(并查集)
- POJ 2236 Wireless Network //并查集
- POJ 2236 WIRELESS NETWORK(并查集)
- POJ-2236 wireless network 并查集
- poj 2236 Wireless Network(并查集)
- poj 2236 - Wireless Network(并查集)
- POJ 2236 Wireless Network(并查集)
- poj 2236 Wireless Network(并查集)
- poj 2236 Wireless Network(并查集)
- poj 2236 Wireless Network 并查集
- POJ 2236 Wireless Network 并查集
- poj 2236 Wireless Network 并查集
- poj 2236 Wireless Network 【并查集】
- POJ 2236 Wireless Network (并查集)
- POJ 2236 Wireless Network(并查集)
- poj 2236 Wireless Network 并查集
- Java实现多线程的四种方式
- 最大字典序排列
- QTableview 使用
- 找到了淘宝大牛的技术博客
- 大话数据结构读书笔记(4)----二叉树
- poj 2236 Wireless Network(并查集+一点点计算几何)
- Shell一系列退出命令
- Python学习笔记(2)--数据的容器
- c++小项目---求用户输入任意数字中的最大值
- Python机器学习房价预测 (斯坦福大学机器学习课程)
- 关于copyproperties()
- 二分查找的变种
- Nodejs 学习(一)
- 数据清洗---缺失值处理