腐朽的橋梁

2021-09-25 04:49:07 字數 1641 閱讀 9849

題目描述

有n個島嶼和m座橋梁,第i座橋梁雙向連線編號為ai和bi的兩座島嶼。

最初,我們可以使用這些橋梁在任何兩個島嶼之間旅行。

然而,調查結果顯示,從第1座到第m座橋梁都會因老化而依次倒塌。每倒塌一座橋梁,就會存在多對島嶼(a,b)(其中a假設倒塌順序是:從第1座到第m座橋梁依次倒塌,那麼請你分別計算在橋梁i(1≤i≤m)倒塌後有多少對島嶼(a,b)之間不能再進行通行了。

請注意,答案可能超過32位整數型別。

輸入輸出格式

輸入格式:

第一行是兩個整數n和m,分別是島嶼的數量和橋梁的數量。

接下來有m行,每行兩個整數ai和bi ,表示連線島嶼ai和bi的一座橋梁。

輸出格式:

輸出m行,每行乙個整數,依次表示當第i座橋倒塌後不能再進行通行的島嶼對數。

輸入輸出樣例

輸入樣例#1:

4 51 2

3 41 3

2 31 4

輸出樣例#1:00

456輸入樣例#2:

6 52 3

1 25 6

3 44 5

輸出樣例#2:89

1214

15輸入樣例#3:

2 11 2

輸出樣例#3:1說明

【樣例1說明】

例如,當第1到第3座橋梁倒塌時,答案為4,因為我們不能再在橋梁對(1,2)、(1,3)、(2,4)和(3,4)之間通行。

【資料範圍】

對於100%的資料:2≤n≤105;1≤m≤105;1≤ai<bi≤n

所有的(ai,bi)都是不同的。

#include

using

namespace std;

long

long n,m,cnt;

const

int max=

2000010

;long

long fa[max]

;long

long first[max]

,next[max]

,from[max]

,to[max]

,tot[max]

,ans[max]

;//tot為以i為fa的聯通塊中點個數

long

long broke[max]

;void

init()

}int

findfa

(long

long x)

void

mergefa

(long

long a,

long

long b)

void

build

(long

long u,

long

long v)

intmain()

ans[m+1]

=n*(n-1)

/2;for

(int i=m;i>=

1;i--

)else

ans[i]

=ans[i+1]

;}for(

int i=

2;i<=m+

1;i++

) cout<

}

橋梁模式 Bridge Pattern

橋接模式,將實現類和介面類拆分開來,不使用繼承,介面類 抽象類 持有乙個橋接類的引用,根據傳入的橋接實現類引用。這樣在改變橋接類的情況下就可以改變抽象類的執行結果。名詞類 抽象部分 public abstract class circle protected abstract void drawci...

橋梁模式 bridge

橋梁模式的用意是將問題的抽象和實現分離開來實現,通過用聚合代替繼承來解決子類 性增長的問題。比如我們有乙個畫圖程式 有2個圖形 circle rectangle 和2種畫圖方法 drawing1 drawing2 圖形可能會使用drawing1來畫圖 也可能使用drawing2來畫圖 在這個畫圖程式...

橋梁 Bridge 模式

9 橋梁 bridge 模式 橋梁模式的結構圖 這個系統含有兩個等級結構 facade模式的角色 例項 抽象化角色 public abstract class abstaction 修正抽象化角色 public class refinedabstraction extends abstaction ...