使用并查集去推每两个人之间的关系
不会并查集的友友可以看这里:
并查集链接直达
#include<bits/stdc++.h>
using namespace std;
int f[101];
int rel[101][101];
int find(int x) {
if(x!=f[x])
f[x] = find(f[x]);
return f[x];
}
void merge(int x,int y) {
int xx = find(x);
int yy = find(y);
if(xx!=yy)
f[yy] = xx;
}
int main(){
int n,m,k;
cin >> n >> m >> k;
for(int i=1;i<=n;i++)
f[i] = i;
for(int i=0;i<m;i++) {
int x,y,v;
cin >> x >> y >> v;
rel[x][y] = v;
rel[y][x] = v;
if(v==1)
merge(x, y);
}
for(int i=0;i<k;i++) {
int x,y;
cin >> x >> y;
if(find(x)==find(y) && rel[x][y]!=-1) {
cout << "No problem" << endl;
}else if(find(x)!=find(y) && rel[x][y]!=-1) {
cout << "OK" << endl;
}else if(find(x)==find(y) && rel[x][y]==-1) {
cout << "OK but..." << endl;
}else if(find(x)!=find(y) && rel[x][y]==-1) {
cout << "No way" << endl;
}
}
return 0;
}