zoukankan      html  css  js  c++  java
  • 团体程序设计天梯赛 L2-010 排座位 (25分)(并查集)

    题目链接:

    L2-010 排座位 (25分)

    思路:

    两个人有敌对也有共同的朋友就输出OK but...
    朋友的朋友也是朋友;
    两个人不可能同时是朋友和敌人;
    缓缓打出一个?
    言归正传,虽然题意有点迷,但是不要想太多按部就班做就可以;
    对于一个朋友集体我们用并查集来维护就好;

    代码:

    #include<bits/stdc++.h>
    
    using namespace std;
    
    const int maxn = 123;
    int n, m, k, rel[maxn][maxn], par[maxn], rk[maxn];
    
    void init_set(int & n) { for(int i = 1; i <= n; par[i] = i, i++); }
    int find(int x) {
    	if(x == par[x]) return x;
    	return par[x] = find(par[x]);	
    }
    inline void unite(int x, int y) {
    	x = find(x);
    	y = find(y);
    	if(x == y) return;
    	if(rk[y] > rk[x]) par[x] = y;
    	else {
    		par[y] = x;
    		if(rk[x] == rk[y]) ++rk[x];
    	}
    }
    inline bool same(int x, int y) {
    	return find(x) == find(y);	
    }
    
    int main() {
    #ifdef MyTest
    	freopen("Sakura.txt", "r", stdin);
    #endif	
    	cin >> n >> m >> k;
    	init_set(n);
    	for(int i = 0; i < m; i++) {
    		int x, y, r;
    		cin >> x >> y >> r;
    		rel[x][y] = rel[y][x] = r;
    		if(r == 1) unite(x, y);	
    	}
    	while(k--) {
    		int x, y;
    		cin >> x >> y;
    		if(rel[x][y] == 1) puts("No problem");
    		else if(rel[x][y] == 0) puts("OK");
    		else {
    			if(same(x, y))  puts("OK but...");	
    			else puts("No way");
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    golang 用tar打包文件或文件夹
    golang 最和谐的子序列
    golang 轮训加密算法
    golang map
    golang 队列
    golang 栈操作
    golang 多维数组
    golang 数组反转
    c# sendmessage control to scroll
    c# 启动的时候向其他程序传值
  • 原文地址:https://www.cnblogs.com/yuhan-blog/p/12308664.html
Copyright © 2011-2022 走看看