POJ 2236并查集
来源:互联网 发布:心灵鸡汤 知乎 编辑:程序博客网 时间:2024/05/22 12:49
#include"stdio.h"#include"iostream"#include"map"#include"set"using namespace std;const int maxn=1050;double d;int pre[maxn];struct point{double x,y;}a[maxn];void init(int n){ for(int i=1;i<=n;i++) pre[i]=i;}int Find(int x){ return pre[x]==x?x:pre[x]=Find(pre[x]);}void join(int x,int y){ int xx=Find(x),yy=Find(y); if(xx!=yy) pre[xx]=yy;}double sqr(double x){ return x*x;}double dis(point x,point y){ return sqr(x.x-y.x)+sqr(x.y-y.y);}bool same(int x,int y){ return Find(x)==Find(y);}bool in(point a,point b){ return dis(a,b)<=d*d;}int main(){ int n; scanf("%d%lf",&n,&d); map<int,int>Map; init(n); for(int i=1;i<=n;i++) scanf("%lf%lf",&a[i].x,&a[i].y); char s[2]; while(scanf("%s",s)!=EOF) { if(s[0]=='O') { int y1; scanf("%d",&y1); for(int i=1;i<=n;i++) { if(Map[i]>0&&in(a[y1],a[i])) //电脑修好了,在范围之内 join(y1,i); } Map[y1]++; } else { int y1,y2; scanf("%d%d",&y1,&y2); //cout<<Map[y1]<<" "<<Map[y2]<<endl; if(Map[y1]>0&&Map[y2]>0&&same(y1,y2)) //两台电脑都是有用的 并且 在同一个连通分量中 puts("SUCCESS"); else puts("FAIL"); } } return 0;}
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 并查集
- poj并查集
- POJ 并查集
- POJ 2236 Wireless Network(并查集)
- POJ 2236 Wireless Network //并查集
- POJ 2236 WIRELESS NETWORK(并查集)
- POJ-2236 wireless network 并查集
- Bulb Switcher
- 关于LeetCode中Valid Palindrome一题的理解
- 用 CSS3 画心形和搜索放大镜图标
- python loggin记录日志,traceback打印stack
- java comparator.sort 可能注意事项
- POJ 2236并查集
- Android开发不得不看的网址
- 使用PHP写出一个正则表达式,过滤网页上的所有js脚本
- QQ加好友代码 强行聊天的代码 HTML
- USB子系统
- js实现jsp中关闭当前页面方法
- 【幻化万千戏红尘】qianfeng-Android-Day08-基础学习:ListView
- c++ 设计模式之观察者模式
- 爬楼梯问题迭代算法解!