Tips:
数据范围较小时可把二维数组当做map<pair<int,int>,int>使用。
#include <bits/stdc++.h> using namespace std; const int M=110; int fri[M]; bool is_enemy[M][M]; int Find(int x){ while(x!=fri[x]) x=fri[x]; return x; } void Union(int A,int B){ int friA=Find(A); int friB=Find(B); if(friA>friB) fri[friA]=friB; if(friB>friA) fri[friB]=friA; } int main() { for(int i=0;i<M;i++) fri[i]=i; int n,m,k;cin>>n>>m>>k; for(int i=0;i<m;i++){ int a,b,c;cin>>a>>b>>c; if(c==1) Union(a,b); else is_enemy[a][b]=is_enemy[b][a]=true; } for(int i=0;i<k;i++){ int a,b;cin>>a>>b; if(Find(a)==Find(b)){ if(is_enemy[a][b]) cout<<"OK but... "; else cout<<"No problem "; }else{ if(is_enemy[a][b]) cout<<"No way "; else cout<<"OK "; } } return 0; }