题目:
思路分析:
朋友关系通过并查集来实现
敌对关系通过set实现
模拟就行!看代码!
代码实现:
const int MAX=10010;
int fa[MAX];
set<int>s[MAX];
int find(int x){
if(x==fa[x])return x;
return fa[x]=find(fa[x]);
}
void add(int x,int y){
int x1=find(x);
int y1=find(y);
if(x1==y1) return;
fa[x1]=y1;
}
int n,m,k;
int main(){
cin>>n>>m>>k;
for(int i=0;i<=n;i++)
fa[i]=i;
for(int i=0;i<m;i++){
int a,b,c;
cin>>a>>b>>c;
if(c==1){
add(a,b);
}
else {
s[a].insert(b);
s[b].insert(a);
}
}
for(int i=0;i<k;i++){
int a,b;
cin>>a>>b;
int t,t1;
t=0;
t1=0;
if(find(a)==find(b)){
t=1;
}
if(s[a].count(b)==1)
{
t1=1;
}
if(t==1&&t1==0){
cout<<"No problem"<<endl;
}
else if(t==0&&t1==0){
cout<<"OK"<<endl;
}
else if(t==1&&t1==1){
cout<<"OK but..."<<endl;
}
else cout<<"No way"<<endl;
}
}