L2-010 排座位

并查+无向图
一遍过

#include<cstdio>
#include<bits/stdc++.h>
using namespace std;
const int N = 110;
int f[N];
vector<int> graph[N];
int n;
void init(){
    for(int i=0; i<N; ++i){
        f[i] = i;
    }
}


int find(int x){
    return f[x] == x ? x : f[x] = find(f[x]);
}



void merge(int x, int y ){
    int fx = find(x);
    int fy = find( y );
    if(fx != fy){
        f[fx] = fy;
    }
}
int main()
{
    int m,k;
    cin>>n>>m>>k;
    init();
    for(int i=0; i<m; ++i){
        int x,y,z;
        cin>>x>>y>>z;
        if( z == 1){
            merge(x,y);
        }else{
            graph[x].push_back(y);
            graph[y].push_back(x);
        }
    }
    for(int i=0; i<k; ++i){
        int x,y;
        cin>>x>>y;
        int fx= find(x);
        int fy = find(y);
        int flag = 0;
        for(int j=0; j<graph[x].size(); ++j){
            if(graph[x][j] == y){
                flag = 1;
            }
        }
        if(fx == fy && !flag){
            cout<<"No problem"<<endl;
        }else if(fx != fy && !flag){
            cout<<"OK"<<endl;
        }else if (fx == fy && flag){
            cout<<"OK but..."<<endl;
        }else if( flag ){
            cout<<"No way" <<endl;
        }
    }
    return 0;

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 分析 这道题就是一道找朋友的朋友的题目一看到这个题目首先我想到的是dfs,不过在用dfs写的过程中报错了一个点,目...
    某翁阅读 3,465评论 0 0
  • 站在窗前,凝视着窗外的景色,窗外,七月炎热的阳光闪烁着刺眼的光芒。我在这炎炎的夏日,想你,写你!任笔尖落寂的划过纸...
    静女其姝Y阅读 3,414评论 0 0
  • 每每想到川端康成,都会把《伊豆的舞女》搜出来读一读。字里行间萌生的情愫像山清水气一样往身体里漫,沁人心脾。主人公穿...
    张二板阅读 2,972评论 0 0
  • 这本书我是和三岁半的儿子一起看完的。儿子看不懂里面的文字,却对里面的画兴致勃勃。看完后,约我又看一遍,他会问很多问...
    你好猪小姐阅读 1,722评论 0 0
  • 参加刻意训练营一周有感 刻意训练之必要性 我在百度知道看到一篇文章《专业武术人士与业余爱好者到底有多大差距?》,看...
    伍康恺阅读 1,014评论 0 0