您的答案為: :( 正確答案為: :)
您的答案為: :( 正確答案為: :)
您的答案為: :) 正確答案為: :(
您的答案為: :( 正確答案為: :)
您的答案為: :) 正確答案為: :(
您的答案為: :( 正確答案為: :)
您的答案為: :( 正確答案為: :)
您的答案為: :( 正確答案為: :)
您的答案為: :(
更新了小BUG...上面的會每次把root重設
/**********************************************************************************/
/* Problem: a445 "新手訓練系列- 我的朋友很少" from 新手訓練系列 ~ 4*/
/* Language: CPP (1193 Bytes) */
/* Result: NA(score:30) judge by this@ZeroJudge */
/* Author: saitor362320 at 2012-08-30 11:14:07 */
/**********************************************************************************/
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
using namespace std;
int* p;
int* Rank;
void MakeSet(int x)
{
p[x] = x;
Rank[x] = 0;
}
void Link(int x,int y)
{
if(Rank[x]>Rank[y])
p[y]=x;
else{
p[x]=y;
if(Rank[x]==Rank[y])
++Rank[y];
}
}
int FindSet(int x)
{
if(x!=p[x])
p[x] = FindSet(p[x]);
return p[x];
}
void Union(int x,int y)
{
Link(FindSet(x),FindSet(y));
}
bool answer(int x, int y)
{
return (FindSet(x) == FindSet(y));
}
int main()
{
int n,m,q;
while(cin>>n>>m>>q){
//initial array
p = (int*)(malloc(n*sizeof(int)));
Rank = (int*)(malloc(n*sizeof(int)));
for(int i=0;i<=n;++i) Rank[i]=-1;
//assign relationship
for(int i=0;i<m;++i){
int a,b;
cin >> a >> b;
//make set
if(Rank[a]<0)
MakeSet(a);
if(Rank[b]<0)
MakeSet(b);
Union(a,b);
}
//answer the question
for(int i=0;i<q;++i){
int p1,p2;
cin >> p1 >> p2;
bool ans = answer(p1,p2);
if(ans)
cout << ":)" << endl;
else
cout << ":(" << endl;
}
//release memory
//free(p);
//free(Rank);
}
return 0;
}
//==================
結果:
您的答案為: :) 正確答案為: :(
您的答案為: :) 正確答案為: :(
您的答案為: :) 正確答案為: :(
您的答案為: :) 正確答案為: :(
您的答案為: :) 正確答案為: :(
您的答案為: :) 正確答案為: :(
您的答案為: :) 正確答案為: :(
居然是全域變數的問題....
難怪我找不到