POJ-2236 Wireless Network

来源:互联网 发布:bi开源框架 php 编辑:程序博客网 时间:2024/06/06 02:01

题目链接:http://poj.org/problem?id=2236

题目大意:

先根据各个电台的坐标建立修复后可以直接联系的边,然后每修好一个,就遍历与它可以直接联系的电台,若也是修好的就合并并查集。

代码实现:

#include<iostream>#include<cmath>using namespace std;int par[1010],x[1010],y[1010];int d,n,i,r,r1,k1,k2;bool v[1010];char ch;//查询树的根 int find(int i){if(i!=par[i])par[i]=find(par[i]);return par[i]; }   bool dis(int a,int b) { int q=x[a]-x[b]; int w=y[a]-y[b]; if(q*q+w*w<=d*d) return true;//可以通信  else return false;//不能通信  }int main(){cin>>n>>d;for(i=1;i<=n;i++){par[i]=i;v[i]=false;//初始化设为都是坏的 }for(i=1;i<=n;i++){scanf("%d %d",&x[i],&y[i]);//依次输入坐标 }while(cin>>ch){if(ch=='O'){scanf("%d",&r);//输入要修复的数字号 v[r]=true;//表示r已修复 for(i=1;i<=n;i++){if(i!=r&&v[i]&&dis(i,r)){k1=find(r);k2=find(i);par[k1]=k2;} } }if(ch=='S'){scanf("%d %d",&r,&r1);k1=find(r);k2=find(r1);if(k1==k2)cout<<"SUCCESS"<<endl;elsecout<<"FAIL"<<endl;}}return 0;}



原创粉丝点击