朋友并查集,加一个敌人用地图标记,
分情况查询就可以了。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=111;
int a[maxn][maxn];
int f[maxn];
int Find(int x){
if(f[x]!=x) return f[x]=Find(f[x]);
return f[x];
}
void Union(int x,int y){
int xx=Find(x),yy=Find(y);
if(xx!=yy) f[xx]=yy;
}
int main(){
int n,k,m,x,y,z;
scanf("%d %d %d",&n,&k,&m);
for(int i=1;i<=n;++i) f[i]=i;
for(int i=0;i<k;++i){
scanf("%d %d %d",&x,&y,&z);
if(z==1) Union(x,y);
a[x][y]=a[y][x]=z;
}
for(int i=0;i<m;++i){
scanf("%d %d",&x,&y);
if(a[x][y]==1) {
printf("No problem\n");continue;
}
if(a[x][y]==-1){//printf("%d %d~~~~~~~\n",Find(x),Find(y));
if(Find(x)==Find(y)) printf("OK but...\n");
else printf("No way\n");
continue;
}
printf("OK\n");
}
return 0;
}