POJ2236詳細的解題報告(C語言版)
#include<stdio.h>
#include<string.h>
int a[100000];
int flag[100000];//標記電腦是否被修,1為修好,0為未修
int b[100000][2];//座標
int n;
void creat()
{
for(int i=1;i<=n;i++)//由於題目要求N>0,編號大於0
{
a[i]=i;
}
}
int set_friend(int x)//找祖先
{
int r=x;
while(a[r]!=r)
{
r=a[r];
}
int i=x;
int j;
while(i!=r)//路徑壓縮
{
j=a[i];
a[i]=r;
i=j;
}
return r;
}
void join_friend(int x,int y)//連起來
{
int fx=set_friend(x);
int fy=set_friend(y);
if(fx!=fy)
{
a[fx]=fy;
}
}
int is_friend(int x,int y)//判斷電腦是否可以連通
{
int fx=set_friend(x);
int fy=set_friend(y);
if(fx==fy)
return 1;
else return 0;
}
int distance(int x,int y)//求兩臺電腦之間距離的平方
{
return ((b[x][0]-b[y][0])* (b[x][0]-b[y][0])+(b[x][1]-b[y][1])*(b[x][1]-b[y][1]));
}
int main()
{
int d;
char c[10];
while( scanf("%d%d",&n,&d)!=EOF)
{
creat();
memset(flag,0,sizeof(flag));
for(int i=1;i<=n;i++)
{
scanf("%d%d",&b[i][0],&b[i][1]);
}
d*=d;//距離的平方進行判斷,方便
while(scanf("%s",c)!=EOF)
{
if(c[0]=='O')
{
int t;
scanf("%d",&t);
flag[t]=1;
for(int j=1;j<=n;j++)
{
if(flag[j]==1&&distance(j,t)<=d)
{
join_friend(j,t);
}
}
}
if(c[0]=='S')
{
int a,b;
scanf("%d%d",&a,&b);
if( is_friend(a,b)==1)
printf("SUCCESS\n");
else if(is_friend(a,b)==0) printf("FAL\n");
}
}
}
return 0;
}
相關文章
- C語言 printf詳解C語言
- C語言#define詳解C語言
- C語言斷言assert詳解C語言
- Dart語言詳解(一)——詳細介紹Dart
- Oracle AWR報告詳細解讀Oracle
- c語言指標詳解C語言指標
- 詳解C語言函式C語言函式
- c語言列舉詳解C語言
- c語言運算子詳解C語言
- C語言函式操作大全----(超詳細)C語言函式
- C語言運算子深度解析--超詳細C語言
- C/C++語言精髓 *和&詳解C++
- C語言字串操作總結大全(超詳細)C語言字串
- 詳細的AWR解析報告
- C語言-srand種子詳解C語言
- C語言指標詳解(一)C語言指標
- C語言指標詳解(二)C語言指標
- C語言 sizeof函式詳解C語言函式
- (C語言版)猴子吃桃問題C語言
- leetcode100題 題解 翻譯 C語言版 Python版LeetCodeC語言Python
- C 語言回撥函式詳解函式
- C語言可變引數詳解C語言
- 教你C語言實現通訊錄的詳細程式碼C語言
- c語言程式設計--實驗報告一C語言程式設計
- c語言程式設計——實驗報告六C語言程式設計
- # c語言程式設計——實驗報告一C語言程式設計
- c語言程式設計——實驗報告一C語言程式設計
- c語言程式設計——實驗報告二C語言程式設計
- C語言程式設計—實驗報告四C語言程式設計
- C語言程式設計-實驗報告4C語言程式設計
- c語言程式實驗——實驗報告五C語言
- c語言程式實驗————實驗報告十C語言
- c語言程式實驗————實驗報告十二C語言
- 基於C語言的Q格式使用詳解C語言
- C語言解決排序問題C語言排序
- C語言函式傳遞指標引數的問題詳解C語言函式指標
- C語言的謎題C語言
- C語言運算子優先順序列表(超詳細)C語言