L2-010 Rangée de sièges (et levez les yeux)

lien du sujet

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

des idées

Pour la relation entre amis et amis, on peut la maintenir grâce à la recherche d'union , puis pour la relation entre ennemis, il suffit d'utiliser un tableau ou une carte à deux dimensions pour la maintenir, car seule la relation hostile directe est l'ennemi, puis Pour chaque enquête, nous pouvons classer et discuter selon leur amitié et leur hostilité.

code

#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;
}

Je suppose que tu aimes

Origine blog.csdn.net/m0_46201544/article/details/123805950
conseillé
Classement