简单并查集Wireless Network POJ - 2236
2017-06-08 15:44
246 查看
这个题之前看的时候总是感觉不是很懂那个题目意思。现在感觉还蛮简单的。。。这里的话,学到了一点,如果用到了sqrt的话,还要判断大小相等关系的话,可以转化为平方来做。
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cmath> using namespace std; const int maxn = 1009; struct node { int x,y; //double dist; }; node a[maxn]; int dis[maxn]; int vis[maxn]; int findf(int k) { if(k==dis[k]) return k; else return dis[k]=findf(dis[k]); } int main() { int n,distan; scanf("%d %d",&n,&distan); distan=distan*distan; for(int i=1;i<=n;i++) { scanf("%d %d",&a[i].x,&a[i].y); } char s[5]; for(int i=0;i<=n;i++) dis[i]=i; while(scanf("%s",s)!=EOF) { if(s[0]=='O') { int d; scanf("%d",&d); vis[d]=1; for(int i=1;i<=n;i++) { if(vis[i]&&i!=d) { int root1=findf(i); int root2=findf(d); if(root1!=root2){ int dist=(a[i].x-a[d].x)*(a[i].x-a[d].x)+(a[i].y-a[d].y)*(a[i].y-a[d].y); //cout<<"*"<<floor(dist)<<endl; if(dist<=distan) { dis[root1]=root2; } } } } } else { int x,y; scanf("%d %d",&x,&y); int root1=findf(x); int root2=findf(y); if(root1!=root2) printf("FAIL\n"); else printf("SUCCESS\n"); } } return 0; }
相关文章推荐
- poj 2236 Wireless Network (简单的并查集应用)
- POJ 2236 Wireless Network 简单并查集
- POJ 2236 Wireless Network 【并查集的简单应用 判断是否在同一连通分量】
- 简单并查集Wireless Network POJ - 2236
- POJ 2236 Wireless Network(简单并查集)
- 简单并查集Wireless Network POJ - 2236
- POJ - 2236 简单的并查集
- 简单并查集Wireless Network POJ - 2236
- POJ 2236 (简单并查集) Wireless Network
- poj2236 Wireless Network 简单并查集
- 简单并查集Wireless Network POJ - 2236
- Poj(2236),简单并查集
- 简单并查集Wireless Network POJ - 2236
- POJ 2236 Wireless Network 【并查集的简单应用 判断是否在同一连通分量】
- POJ - 2236 Wireless Network(简单并查集)
- 简单并查集Wireless Network POJ - 2236
- 简单并查集Wireless Network POJ - 2236
- 简单并查集Wireless Network POJ - 2236
- poj 2236 Wireless Network (并查集)
- pku 2236 poj 并查集一般题