poj 2236 并查集水题

来源:互联网 发布:因子分解机 推荐算法 编辑:程序博客网 时间:2024/06/02 23:31

点击打开链接

#include <iostream>#include <cmath>using namespace std;const int M= 1100;typedef struct {double x;double  y;}Node;Node node[M];int par[M],n,state[M]; // state[i] i号机是否修好 double d;void Inin(){for(int i=1;i<=n;i++){par[i]=i;state[i]=0;}}bool dis(int a,int b){double dx=node[b].x-node[a].x;double dy=node[b].y-node[a].y;if(sqrt(dx*dx+dy*dy)<=d){return true;}return false;}int find(int x){if(x!=par[x]){par[x]=find(par[x]);}return par[x];}void Union(int x,int y){int a=find(x);int b=find(y);if(a!=b)par[a]=b;}int main(){cin>>n>>d;for(int i=1;i<=n;i++){cin>>node[i].x>>node[i].y;}Inin();//char c;while(cin>>c){if(c=='O'){int x;cin>>x;state[x]=1;//for(int i=1;i<=n;i++){if(x!=i&&state[i]&& dis(x,i)){Union(x,i); // 在一个集合中的元素能互相 communicate }}}if(c=='S'){int a,b;cin>>a>>b;if(state[a]==0||state[b]==0){cout<<"FAIL"<<endl;continue;}int fa=find(a);int fb=find(b);if(fa!=fb){cout<<"FAIL";}else{cout<<"SUCCESS";}cout<<endl;}}return 0;}


0 0