POJ2236-并查集
来源:互联网 发布:挖贝软件下载 编辑:程序博客网 时间:2024/06/09 20:07
有一群网络,有n个电脑,每个电脑相距距离小于等于d则可以连接。给定下面的操作。
1 如果是‘O’(不是0啊,qwq)那么就修复他
2 如果是 S ,就判断他们是不是连接。
是就是SUCCESS 否则就是FAIL
首先记录一下坐标。
其次,在修复的时候给定他们并查集的初始化,并把距离符合的连接起来,
判断的时候用并查集的find,妥妥的。(注:find注意在后面要合并的时候,合并的是他们的老祖宗。。这样就相当于路径压缩了,find1的时候也路径压缩了,就是让节点和祖宗之间的点都认了祖宗。。原谅我措辞不好QWQ)
错误:距离竟然没有d*d。。囧
判断合并的时候还要看一下是不是-1,如果两个-1相等,也是fail(修都没修)
如果合并的时候不合并-1,会优化一半时间(合并-1没有意义呢)
#include <iostream>#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <queue>using namespace std;const int maxn=2000;int fa[maxn];int d;pair<int,int> G[maxn];int m;int find1(int x){ if(fa[x]==-1)return -1; if(fa[x]==x) return x; return fa[x]=find1(fa[x]);}bool check(int a,int b){ int x=abs(G[a].first-G[b].first); int y=abs(G[a].second-G[b].second); if(x*x+y*y<=d*d) { //cout<<a<<"friend"<<b<<endl; return true;} return false;}void unite(int a,int b){ int x=find1(a); int y=find1(b); if(x==y)return; fa[x]=y;}void init(int x){ fa[x]=x; for(int i=1;i<=m;i++){ if(check(i,x)&&fa[i]!=-1)//此处优化减少一半时间 unite(i,x); }}int main(){ ios::sync_with_stdio(false); queue<string>qq; char q; int a1,b1; memset(fa,-1,sizeof(fa)); cin>>m>>d; for(int i=1;i<=m;i++){ cin>>G[i].first>>G[i].second; } while(cin>>q){ if(q=='S'){ cin>>a1>>b1; if(find1(a1)==find1(b1)&&find1(a1)!=-1) qq.push("SUCCESS"); //cout<<"SUCCESS"<<endl;这样输出也行。不过入队列会慢一点。。。 else //cout<<"FAIL"<<endl; qq.push("FAIL"); } else if(q=='O') { a1=q-'0'; cin>>b1; init(b1); } } while(!qq.empty()){ cout<<qq.front()<<endl; qq.pop(); } return 0;}
阅读全文
0 0
- poj2236 并查集
- poj2236并查集
- poj2236 并查集
- poj2236(并查集)
- POJ2236(并查集)
- 并查集-poj2236
- poj2236 并查集
- poj2236 并查集
- poj2236(并查集)
- poj2236 并查集
- POJ2236 并查集
- POJ2236并查集
- POJ2236并查集
- POJ2236-并查集
- poj2236(并查集)
- poj2236(并查集)
- poj2236(并查集)
- POJ2236 Wireless Network(并查集)
- 二分图最大匹配(匈牙利KM)
- 数据库
- 项目总结任务计划
- 前端自动化测试
- 容斥定理 | 初步
- POJ2236-并查集
- JSONObject需要的jar包
- linux下sudo和su的一些区别
- AI 自动研发机器学习系统,DeepMind 让算法学习强化学习
- Android 打包aar给unity3d使用 项目心得
- http解析XML
- ural 1033. Labyrinth dfs
- 关于php 数组的一些感想心得
- spring main测试