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#includeusing
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...