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