PTA L2-010 排座位 團體程序設計天梯賽(C++ 代碼)

題目鏈接
思路:
開一個二維數組arr記錄關係,關係爲1或者爲0直接輸出。
使用並查集將是朋友關係的客人合併,判斷敵對的客人是否具有相同的祖先即可。

#include<bits/stdc++.h>
using namespace std;
int par[105],arr[105][105];
int find(int x){
	if(par[x] == x) return x;
	return par[x] = find(par[x]);
}
void join(int a,int b){
	int x = find(a);
	int y = find(b);
	if(x == y) return;
	par[x] = y;
}
int main(){
	int n,m,k;
	cin>>n>>m>>k;
	for(int i = 1;i <= n;i++) par[i] = i;
	for(int i = 0;i < m;i++){
		int a,b,c;
		cin>>a>>b>>c;
		arr[a][b] = c;
		arr[b][a] = c;
		if(c == 1){
			join(a,b);
		}
	}
	for(int i = 0;i < k;i++){
		int a,b;
		cin>>a>>b;
		if(arr[a][b] == 1) cout<<"No problem"<<endl;
		else if(arr[a][b] == 0) cout<<"OK"<<endl;
		else if(arr[a][b] == -1 && find(a) == find(b)) cout<<"OK but..."<<endl;
		else if(arr[a][b] == -1 && find(a) != find(b)) cout<<"No way"<<endl;
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章