樹上問題專練 電壓

2022-05-19 04:41:04 字數 2942 閱讀 9695

c電壓時間限制 : 10000 ms   空間限制 : - kb

評測說明 : 1s,256m

問題描述

joi社的某個實驗室中有著複雜的電路。電路由n個節點和m根細長的電阻組成。節點被標號為1~n

每個節點有乙個可設定的狀態【高電壓】或者【低電壓】。每個電阻連線兩個節點,只有一端是高電壓,另一端是低電壓的電阻才會有電流流過。兩端都是高電壓或者低電壓的電阻不會有電流流過。

某天,joi社為了維護電路,選擇了一根電阻,為了能讓【只有這根電阻上的電流停止流動,其他m-1根電阻中都有電流流過】,需要調節各節點的電壓。為了滿足這個條件,能選擇的電阻共有多少根?

對了,joi社這個奇妙的電路是用在什麼樣的發明上的呢?這是公司內的最高機密,除了社長以外誰都不知道哦~

現在給出電路的資訊,請你輸出電路維護時可以選擇使其不流的電阻的個數。

輸入格式

第一行兩個空格分隔的正整數n和m,表示電路中有n個節點和m根電阻。

接下來m行,第i行有兩個空格分隔的正整數ai和bi(1<=ai<=n,1<=bi<=n,ai≠bi),表示第i個電阻連線節點ai和節點bi。

輸出格式

輸出一行乙個整數,代表電路維護時可選擇的使其不流的電阻個數。

樣例輸入

4 41 2

2 33 2

4 3樣例輸出

提示可以選擇第一根電阻或第四根電阻。

2<=n<=10^5

1<=m<=2*10^5

不保證圖是連通的,不保證沒有重邊

分析建一棵dfs樹,則特殊邊就全部為返祖邊 用ji[u]對結點u統計奇環,ou[u]統計偶環 設一條返祖邊為 u-> v 若它形成奇環,則ji[u]++,ji[v]--. 則u的子樹所有結點的ji之和,即為u -> fa這條邊被多少奇環包含 (差分字首和的思想)(樹上差分)

u的子樹所有結點的ji之和,即為u -> fa這條邊被多少奇環包含

如:u==2

ji[2]+ji[4]+ji[9]+ji[5]+ji[7]=1

則2--1被奇環覆蓋了一次(4,2,1)

同理u==8

ou[8]+ou[10]+ou[11]+ou[12]=2

則8--12被偶環覆蓋了2次(8,11,12,6)(8,6,3,1)

奇環的情況可以選的邊是環上的邊,偶環的情況可以選的邊是非環上的邊;

而當多個環同時存在的時候,可以選的邊是這些環可以選邊的交集(無影響)

情況1:兩個與樹邊形成奇環的邊 一定產生乙個偶環(2,3,4,5) 但偶環上的邊不可能被所有奇環包含

情況2:兩個偶環 本來他們的邊就全部不滿足條件 不用考慮多生成的新偶環(2,4,7,5)

情況3:乙個奇環+乙個偶環 生成乙個奇環(2,5,7,6,4) 這個奇環的樹邊本來就在原奇環上 無需考慮

唯一非樹邊會有貢獻的情況就是有且僅有乙個奇環,此時一定只有一條非樹邊在奇環內 提供貢獻

記錄這個點連向父親的邊被幾個奇環幾個偶環所覆蓋;

然後被所有的奇環覆蓋又不被任意偶環覆蓋的邊即是答案;

非樹邊的情況只有奇環數為1的時候才能選那一條

#include#include

using

namespace

std;

template

inline

void read(t&x)

for(x=0; isdigit(ch); ch=getchar())x=x*10+ch-'0'

;

if(!sign)x=-x;

}struct

node

edge[

2000005

];int n,m,fa[200010],head[2000010],num=1,d[200010],ji[200010],ou[200010],sumou,sumji,ans;//

ji[u]對結點u統計奇環,ou[u]統計偶環

inline void add(int x,int

y)void dfs(int x,int

y)

else}}

}int

main()

for(int i=1; i<=n; ++i)

}for(int i=1; i<=n; ++i)

if(sumou==1) ++ans;//

只有一條返祖邊在奇環上,將答案+1

cout<

return0;

}

Tarjan演算法專練

題意 給乙個圖判斷是否是強連通圖。題解 利用tarjan計算圖中強連通分量的個數,如果為1則是強連通圖,否則不是。includeusing namespace std const int n 2e4 100 typedef long long ll vectorg n bool is instack...

動態逆序對專練

就是三倍經驗 維護乙個序列,每次修改後求出當前序列逆序對個數。題目讓我們求出 sum n sum n a i a j 也就是讓我們求出滿足 pos ia j 的點對數量。對於不修改的情況,這顯然是乙個三維偏序問題,用樹狀陣列或歸併處理都可以。我這麼懶當然是用樹套樹啦 樹狀陣列維護序列,值域線段樹維護...

dp 雜練 專練 round2

上次題似乎有點水 大概到noi之前會進行一些針對自己薄弱點的專項訓練吧 bz oj1419re disg ood 額.dp i j 表示re d剩i張 bla ck剩j 張的期望 每次期望 概率 轉移就行 注意如果期望在 0以下就 不取了 空間不夠 所以滾 一下 code by liuchenrui...