1123 bzoj

説明

M双方向道路町をn個が都市Byteotia。つの異なる町、無重複道路を結ぶ道路。町全ての通信。

入力

入力N <=10万メートル<=50万メートル縁部、及び

出力

出力数n、i番目の点の代表削除した場合、ポイント数を交換することができません。

サンプル入力

5
1 2
2 3
1 3
3 4
4 5

サンプル出力

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 ;
} 
コードの表示

 

おすすめ

転載: www.cnblogs.com/plysc/p/11440357.html