您的位置:首页 > 其它

poj 2236 并查集水题

2016-06-20 13:54 357 查看
点击打开链接

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: