「アルゴリズムノート」セクション9.6 - 特別なデータ構造(2) - >互いに素なセット - > A:通信システム

。A:通信システム

制限時間:1秒メモリ制限:32メガバイト
提出:1677解像度:456
[ 提出 ]、[ 状態 ]、[ ディスカッションボード ] [命題男:外部のインポート]

タイトル説明

市は、通信システムを構築する計画します。計画によると、システムは、通信ケーブルにより連結されたエンドポイントの数を含んでいます。メッセージは、エンドポイントのいずれかで生成することができる、とだけケーブルを介して送信することができます。メッセージに送信されたメッセージを受信した後、各エンドポイントは、メッセージ上のエンドポイントに送信することを除いて、接続されたそれを終了します。エンドポイントエンドポイントがメッセージを生成する場合、メッセージは、各エンドポイントに接続され、それに送信されます。
エンドポイントを生成した後、メッセージを必要なときにリソースの伝送効率と保全性を向上させるために、エンドポイントは、それぞれのメッセージの残りの部分を受信することができ、各エンドポイントは重複メッセージを受信しません。
今、あなたは、このシステムは、上記の要件を満たしているかを決定することができ、通信システムを説明しますか?

エントリー

データの複数のセットを含むテスト入力。すべての間に2つの入力データは空行で区切られます。
まず、二つの整数N及びM、Nを含む各入力(1 <= N <= 1000) エンドポイントの数、Mで表される(0 <= M < = N *(N-1)/ 2)は、 通信回線の数を表します。 。
次のM行それぞれ入力二つの整数AとB(1 <= A、B <= N)が、 AとBはポイントが通信ケーブルで接続されている端部を表します。最も直接的に2つのエンドポイント間のケーブルで接続され、エンドポイントは、自身に接続されたケーブルではありません。
N及びMの場合は、両方の入力端0です。

輸出

対象満たしが与えられた場合、各入力のために、システム要件、出力はい、そうでなければ、出力号に記載しました

サンプル入力

4 3
1 2
2 3
3 4

3 1
2 3

0 0

サンプル出力

はい
番号

[ 送信 ] [ 状態 ]

#include<iostream>
using namespace std;

const int N=1005;
int father[N];

void init(int n){
	for(int i=1;i<=n;i++){
		father[i]=i;
	}
} 

int findFather(int a){
	int x=a;
	while(x!=father[x]){
		x=father[x];
	}
}
void Union(int a,int b){
	int A=findFather(a);
	int B=findFather(b);
	if(A!=B){
		father[A]=B;
	} 
}
int main(){
	int n,m;
	while(cin>>n>>m){
		if(n==0||m!=n-1)
			break;
		init(n);
		for(int i=0;i<m;i++){
			int a,b;
			cin>>a>>b;
			Union(a,b);
		} 
		int ans=0;
		for(int i=1;i<=n;i++){
			if(i==father[i])
				ans++;
		}
		if(ans==1)
			cout<<"Yes"<<endl;
		else
			cout<<"No"<<endl;
	}
	return 0;
}

 

公開された51元の記事 ウォン称賛7 ビュー7407

おすすめ

転載: blog.csdn.net/Jason6620/article/details/104083445