很經典的一道題目,首先我們考慮每一條附加邊x-y 會造成的影響
會使得x-y的簡單路徑上每條邊斷開的權值都加1
權值的意義:權值為0,它搭配m條附加邊的任意乙個都可以
權值為1,它只能搭配乙個附加邊
權值大於1,無論搭配哪個附加邊,都無法做到使原圖不連通
所以我們利用樹上差分,處理每條附加邊時,先把它加到乙個差分陣列d中 (這裡把邊權記在點上,每個點上的值為它和他父親的連邊)
當所有的附加邊處理完之後,跑一邊dfs累加一下就好了
**
#includeusingnamespace
std;
const
int maxn=3e5+5
;int
n,m,head[maxn],cnt,dep[maxn];
int f[maxn][20
],d[maxn];
struct
edge
e[maxn
<<1
];void add(int x,int
y)void dfs(int u,int
fa)}
void
init_lca()
int lca(int x,int
y)void calc(int u,int
fa)}
intmain()
dfs(
1,0);
init_lca();
for(int i=1;i<=m;i++)
calc(
1,0);
long
long ans=0
;
for(int i=2;i<=n;i++)
printf(
"%lld\n
",ans);
return
0;
}
2020天梯賽模擬賽
include using namespace std intmain void include using namespace std intmain void include using namespace std intmain void cout a b endl return0 inclu...
天梯賽賽前模擬賽補題 2020
一 暢通工程之最低成本建設問題 這道題是用最小生成樹做的,之前最小生成樹練的很少,比賽時沒寫出來,也沒考慮用最小生成樹,還是練得少。這個題可以用kruskal演算法做,先將每條路的花費從小到大排序,然後再從頭開始加每條邊花費的 從頭開始用並查集判斷兩個點的根節點是否相同,如果相同說明出現了環,就co...
NOIP提高組模擬賽9
考場跑了個dijstra就跑路,然後t了。其實dij用處不大,這題用bfs說不定還快點。但是直接大力bfs顯然同樣會t飛,考慮如何優化,問題的關鍵在於這張 圖 的 邊數 太多了,但是在bfs或者其他演算法dij中,每個點第一次被訪問就是該點的答案,也就是說,雖然我們多次掃到同乙個點,但真正有意義的只...