GPLT L2-010 排座位 (并查集)

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...\n";
            else cout<<"No problem\n";
        }else{
            if(is_enemy[a][b]) cout<<"No way\n"; 
            else cout<<"OK\n";
        }
    }
    return 0;
}

 

posted @ 2020-03-17 10:52  Kanoon  阅读(145)  评论(0编辑  收藏  举报