题目链接:https://www.patest.cn/contests/gplt/L2-010
题意:两个人之间有两种关系。敌对和朋友。只要不是敌对关系就可以坐在同一张桌子。问任意两个人关系。
题解:加一个数组记录两个人的敌对关系,然后朋友的话就用并查集维护一下。题目有点坑,不复答案中英文。就过不去,就很难受。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 105; int father[N]; int re[N][N]; void init(int n){ for(int i = 0 ; i <= n ; i++){ father[i] = i; } } int find(int x){ if(x == father[x]) return x; else return father[x] = find(father[x]); } void Union(int a,int b){ int fa = find(a); int fb = find(b); if(fa != fb) father[fa] = fb; } int main(){ int n,m,k; cin >> n >> m >> k; init(n); for(int i = 0 ; i < m ; i++){ int a,c,b; cin >> a >> b >> c; re[a][b] = c; re[b][a] = c; if(c == 1) Union(a,b); } for(int i = 0 ; i < k ; i ++){ int a,b; cin >> a >> b; if(re[a][b] == 1) cout <<"No problem" << endl; else if(re[a][b] == -1){ if(find(a) == find(b)) cout << "OK but..." <<endl; else cout << "No way" << endl; } else cout << "OK" << endl; } }