#include#include#include
using
namespace
std;
const
int maxn=50010
;int
pre[maxn],other[maxn],last[maxn],l;
intn,m;
intdfn[maxn],low[maxn],ans[maxn],st[maxn],belong[maxn],cnt,top,qw;
//dfn->dfs序,low是點上非樹邊指向的點(擁有最小的dfs序 ),st是乙個棧,記錄環上的點,belong是點所屬於的環
void add(int x,int
y)int ru[maxn],chu[maxn];//
入度,出度
void dfs(int
x)
else
if(ru[v])//
兒子不在環上,因為環上的點low是沒有意義的
}if(dfn[x]==low[x])//
說明這是乙個環
}}int
main()
for(int i=1;i<=n;i++)
for(int i=1;i<=n;i++)}}
int p=0;//
因為要所有牛都喜歡,所以只允許乙個環的出現
for(int i=1;i<=qw;i++)
p=i;}}
printf(
"%d\n
",ans[p]);
return0;
}/*tarjan求強連通分量;
這個板子就是在乙個有向圖中,找到乙個所有點直接或間接指向的乙個點
(實際上可以是乙個環,可以想象乙個有向環,上面有許多「枝條」,
這樣所有環上的點都直接或間接指向環上的點,然後所有枝條上的點都直接或間接指向環上的點;
那麼環上的點就是那些所有點都直接或間接指向的)
*/
模板 tarjan求強連通分量
大約是今年4月學的演算法了,後來5月的時候做題還寫了乙個退化的tarjanqaq。時間複雜度 o n m 用途 有向圖縮環 1 include 2 include3 include4 include5 include6 include7 include8 include9 include10 inc...
Tarjan模板 求強連通分量
tarjan求強連通分量的流程在這個部落格講的很清楚,再加上我也沒理解透,這裡就不寫了。縮點 將同乙個連通塊內的點視為同乙個點。扔一道模板題 codevs2822愛在心中 第一問很顯然就是求點數大於一的連通塊的個數,跑一次tarjan 第二問腦補一下發現,縮點後,若圖中有且僅有乙個點出度為0且為愛心...
強連通分量 tarjan求強連通分量
雙dfs方法就是正dfs掃一遍,然後將邊反向dfs掃一遍。挑戰程式設計 上有說明。雙dfs 1 include 2 include 3 include 4 include 5 6using namespace std 7const int maxn 1e4 5 8 vector g maxn 圖的鄰...