説明
M双方向道路町をn個が都市Byteotia。つの異なる町、無重複道路を結ぶ道路。町全ての通信。
入力
入力N <=10万メートル<=50万メートル縁部、及び
出力
出力数n、i番目の点の代表削除した場合、ポイント数を交換することができません。
サンプル入力
5
1 2
2 3
1 3
3 4
4 5
1 2
2 3
1 3
3 4
4 5
サンプル出力
8
8
16
14
8
8
16
14
8
二点ユニコム後、ポイント統計はカットする答えを見つけるために
最後の答えは2で乗算されることに注意してください(サンプルを伝えることができます参照してください)
書式#include <iostreamの> の#include <CStringの> の#include <cstdioを> に#define LL長い長い 使って 名前空間はstdを、 const int型 MAXN = 100010 ; const int型 MAXM = 500010 ; int型[MAXN] DFN、ティム、[MAXN] TT、N、M、ヘッド[MAXN]、サイズ、低[MAXN]。 【MAXN] ANS LL。 構造体のエッジ{ int型V、NEX。 } E [MAXM << 1 ]。 無効 ADDE(int型のu、int型V){ E [サイズ] .V = V; E [サイズ] .nex =頭部[U];頭部[U] =サイズ++ 。 } 空 DFS(int型のuを){ 低[U] =のDFN [U] = ++ ティム。 int型の T = 0 ; TT [U] = 1 。 用(int型 ;〜I; I =ヘッド[U] I = E [i]は.nex){ int型、V = E [I] .V。 もし(!DFN [V]){ DFS(V); 低[U] = 分(低[U]、[V]低いです)。 TT [U] + = TT [V]。 もし(低[V]> = DFN [U]){ 年[U] + =(長い 長い)は、T *のTT [V]。 T + = TT [V]。 } } 他の低[U] = 分(低[U]、DFN [V])。 } ANS [U] + =(LL)のt *(NT- 1 )。 } INT {main()の scanf関数(" %d個の%のD "、&N、&M)。 memsetの(頭、 - 1、はsizeof (ヘッド))。 以下のために(int型 I = 1 ; I <= M; iは++ ){ int型Uを、V。 scanf関数(" %d個の%d個"、&U&V); ADDE(U、V); ADDE(V、U)。 } 以下のために(int型 I = 1、私は++;;私は<= N ) の場合(!DFS(I)DFN [I]); 以下のために(int型 i = 1 ; iが<= N; iは++)のprintf(" %LLDする\ n "(ANS [I] + N- 1)* 2 )。 リターン 0 ; }