L2-010 排座位(并查集)

Posted MangataTS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了L2-010 排座位(并查集)相关的知识,希望对你有一定的参考价值。

题目链接

https://pintia.cn/problem-sets/994805046380707840/problems/994805066135879680

思路

对于朋友和朋友之间的关系我们通过并查集维护即可,然后对于敌人之间的关系,我们只需要用一个二维数组或者使用map就能维护,因为只有直接敌对关系才是敌人,然后对于每一次询问我们就根据他们俩的朋友关系、敌对关系分类讨论即可

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
#define endl "\\n"
#define PII pair<int,int>
#define INF 0x3f3f3f3f

const int N = 1e2+10;

int fa[N],n,m,k;
bool enmy[N][N];
int find(int x)
	return x==fa[x]?x:find(fa[x]);


int main()

	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n>>m>>k;
	for(int i = 1;i <= n; ++i) fa[i] = i;
	int u,v,w;
	for(int i = 1;i <= m; ++i) 
		cin>>u>>v>>w;
		if(w + 1) 
			u = find(u);
			v = find(v);
			fa[v] = u;
		 else 
			enmy[u][v] = enmy[v][u] = true;
		
	
	for(int i = 1;i <= k; ++i) 
		cin>>u>>v;
		if(enmy[u][v]) 
			if(find(u) == find(v)) cout<<"OK but..."<<endl;
			else cout<<"No way"<<endl;
		 else 
			if(find(u) == find(v))
				cout<<"No problem"<<endl;
			else  cout<<"OK"<<endl;
		
	
	return 0;

以上是关于L2-010 排座位(并查集)的主要内容,如果未能解决你的问题,请参考以下文章

洛谷P1525 关押罪犯 并查集

[qbzt寒假] 并查集

并查集团伙

BZOJ 1370: [Baltic2003]Gang团伙(luogu 1892)(种类并查集)

P1525 关押罪犯(二分图/并查集)

并查集之团伙(codevs)