pku 2236 Wireless Network

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

方法一:

修好的电脑用k[i]=1标记,没有修好的用k[i]=0标记,构造并查集时用k[i]=1的

代码:

View Code
#include<stdio.h>
#include
<math.h>
struct node
{
int x,y;
}s[
1001];
int d;
int set[1001];
bool k[1001];
int distance(node a,node b)
{

if((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)<=d)
return 1;
return 0;
}

int find(int x)
{
int j,i=x;
if(x==set[x])
return x;
else
set[x]=find(set[x]);
while(set[x]!=i)
{
j
=set[i];
set[i]=set[x];
i
=j;
}
return set[x];
}

void merge(int x,int y)
{
int fx=find(x);
int fy=find(y);
set[fx]=fy;
}

int main()
{
int n,num,i,x,y,p;
char ch;
scanf(
"%d%d",&n,&d);
d
=d*d;
for(i=1;i<=n;i++)
{
scanf(
"%d%d",&s[i].x,&s[i].y);
k[i]
=0;
set[i]=i;
}
num
=0;
getchar();
while(scanf("%c",&ch)!=EOF)
{
if(ch=='O')
{
num
++;
scanf(
"%d",&p);
k[p]
=1;
if(num!=1)
{
for(i=1;i<=n;i++)
{
if(k[i]&&distance(s[i],s[p]))
merge(i,p);
}
}
}

if(ch=='S')
{
scanf(
"%d%d",&x,&y);
if(find(x)==find(y)||distance(s[x],s[y]))
printf(
"SUCCESS\n");
else
printf(
"FAIL\n");
}
getchar();
}
return 0;
}

方法二:

把修好的电脑放到数组p[]中,但时间上尽然比方法一还慢,并且在放入p时,i不能从0开始否则会re求高人指点

代码:

View Code
#include<stdio.h>
#include
<math.h>
struct node
{
int x,y;
int k;
}s[
1001],p[1001];
int set[1001];
int d;
int distance(node a,node b)
{

if((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+0.0<=d)
return 1;
return 0;
}

int find(int x)
{
int j,i=x;
if(x==set[x])
return x;
else
set[x]=find(set[x]);
while(set[x]!=i)
{
j
=set[i];
set[i]=set[x];
i
=j;
}
return set[x];
}

void merge(int x,int y)
{
int fx=find(x);
int fy=find(y);
set[fx]=fy;
}

int main()
{
int n,i,j,w,x,y;
char ch;
scanf(
"%d%d",&n,&d);
d
=d*d;
for(i=1;i<=n;i++)
{
scanf(
"%d%d",&s[i].x,&s[i].y);
s[i].k
=i;
set[i]=i;
}
i
=1;
getchar();
while(scanf("%c",&ch)!=EOF)
{
if(ch=='O')
{
scanf(
"%d",&w);
p[i]
=s[w];
i
++;
if(i>1)
{
for(j=1;j<i-1;j++)
{
if(distance(p[j],p[i-1]))
merge(p[j].k,p[i
-1].k);
}
}
}

if(ch=='S')
{
scanf(
"%d%d",&x,&y);
if(find(x)==find(y)||distance(s[x],s[y]))
printf(
"SUCCESS\n");
else
printf(
"FAIL\n");
}
}
return 0;
}

  

原文地址:https://www.cnblogs.com/lujiacheng/p/2115804.html