問題の説明
、都市交通、既存のテーブルを取得するために、都市道路の省の調査では、テーブルには、各道路が直接接続都市や町を示しています。ターゲット州政府「円滑な交通プロジェクト」(あなたが道路を介して間接的に相互に到達できる限り、必ずしも直接道路に接続していない)任意の2つの町の間で地域がトラフィックを実装できるようにすることです。最小も構築する必要がありますどのように多くの道路尋ねましたか?
入力
テスト入力には、いくつかのテストケースが含まれています。各テストケースは、町N(<1000)と道路番号Mの数であり、最初の2つの正の整数の列が与えられ、次のMパスに対応するM個の行は、各列は、正の整数の組が与えられ、それぞれ、数直接通信経路における2つの町。簡単にするため、町は1からNまでの番号
注:道路の数が2つの都市の間で通信することができる、すなわち、
3 3
1 2
1 2
2 1
この入力が有効である
Nが0である場合、入力端、ユースケースが処理されません。
出力
各テストケースについては、出力道路の最小数は、行に構築する必要があります。
サンプル入力
4 2
1 3
4 3
3 3
1 2
1 3
2 3
5 2
1 2
3 5
999 0
0
サンプル出力
1
0
2
998
#include <ビット/ STDC ++ H.> 使用して 名前空間STD; typedefの長い ロングLL、 INT A [ 1000年 + 5 ]、N-、K、L、R&LTは、 INT(検索INT T) { 戻り T == A [T]を? T:検索([T]); ////凝縮点:繰り返し問い合わせまで、問い合わせをルートに割り当てられた } ボイド解決(int型 LL、INT RR) { 検索(LL)?=探す(RR)A [検索(LL)] =(RR)検索:0 ; // ルートノードの更新を、それはまた、合成または追加の組と呼ぶことができる } int型のmain() { 一方(N-CIN >> K &&N) { ため(int型 I = 1は iがn = <;)は、i ++は[I] = I。 以下のために(int型 i = 1 ; iは= Kを<I ++の) { CIN >> L >> rは、 (L、R)を解きます。 } INT ANS = 0 。 以下のために(int型 I = 1 iは++; iが<= N ) 場合(!I = [I]) ANS ++ 。 coutの << N- 1 -ans << てendl; } }