tarjan縮點-受歡迎的牛-筆記
tarjan模板?emmmm,洛谷P2341。一些對於模板的解釋在程式碼註釋裡。
#include<cstdio>///板子借鑑自hzwer ,%%%hzwer
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define MAXN 10005
#define MAXM 50005
using namespace std;
struct data{
int to,next;
}e[MAXM],d[MAXM];
int head[MAXN];
int n,m,cnt,top;
int dfn[MAXN],low[MAXN],q[MAXN];
int scc,h[MAXN],belong[MAXN],hav[MAXN];
bool vis[MAXN],inq[MAXN];
int ans;
void dfs(int a){
int now;
vis[a]=inq[a]=1;
low[a]=dfn[a]=++cnt;
q[++top]=a;
int c=head[a];
while(c){///找爸爸 找爸爸
if(!vis[e[c].to ]){
dfs(e[c].to );
low[a]=min(low[a],low[e[c].to ]);
}
else if(inq[e[c].to ]) low[a]=min(low[a],dfn[e[c].to ]);
c=e[c].next ;
}
if(low[a]==dfn[a]){////如果a就是SCC的根
scc++;
while(now!=a){////把這個SCC出棧
now=q[top--];
inq[now]=0;
belong[now]=scc;
++hav[scc];
}
}
}
void rebuild(){///SCC找完了,重新建圖
cnt=0;
for(int i=1;i<=n;i++){
int c=head[i];
while(c){////當i還有出度的時候
if(belong[i]!=belong[e[c].to]){
d[++cnt].to =belong[e[c].to ];
d[cnt].next =h[belong[i]];
h[belong[i]]=cnt;
}
c=e[c].next ;
}
}
}
void tarjan(){
for(int i=1;i<=n;i++) if(!vis[i]) dfs(i);
rebuild();
}
void work(){
for(int i=1;i<=scc;i++)
if(!h[i]){/////避免出現多個葉子節點
if(ans){
ans=0;return;
}
else ans=hav[i];
}
}
int main(){
scanf("%d%d",&n,&m);
int a,b;
for(int i=1;i<=m;i++){
scanf("%d%d",&a,&b);
e[++cnt].to =b;
e[cnt].next =head[a];
head[a]=cnt;
}
tarjan();
work();
printf("%d",ans);
return 0;
}
相關文章
- Tarjan演算法_縮點演算法
- Golang 受歡迎的原因:大道至簡Golang
- 讀人工不智慧:計算機如何誤解世界筆記08_受歡迎的計算機筆記
- Java現在還受歡迎嗎?Java
- 深入分析代理IP受歡迎的原因
- Java持續受歡迎的4個理由Java
- tarjan演算法求scc & 縮點演算法
- 【模板】tarjan 強連通分量縮點
- 雲伺服器受歡迎的原因有哪些?伺服器
- GitHub上受歡迎的Android UI LibraryGithubAndroidUI
- 外媒記者分析:iPhone 6 Plus為什麼廣受歡迎?iPhone
- tarjan學習筆記筆記
- Tarjan 學習筆記筆記
- 三點解讀直播短影片帶貨系統會受歡迎的原因
- 盤點2024年國內受歡迎的專案管理軟體專案管理
- 為什麼Linux這麼受歡迎?Linux
- 為什麼 PostgresSQL 比 mySQL 更受歡迎?MySql
- 淺談:Java有哪些受歡迎的使用場景?Java
- 資料分析之Python受歡迎的原因(二)Python
- Tarjan縮點題單 刷題題解
- 邊緣計算為何會如此受歡迎?
- 移動OA系統更受企業歡迎
- 為什麼python大資料受歡迎?Python大資料
- 軟體測試架構師受歡迎嗎?架構
- 蘋果iOS圖示顏色受歡迎度排名蘋果iOS
- 為什麼bootstrap不再那麼受歡迎了?boot
- 受歡迎的無程式碼開發平臺有哪些?
- 會唱歌的程式設計師為何如此受歡迎?程式設計師
- 社交交友原始碼app為何受歡迎?它具有哪些功能特點?原始碼APP
- Omdia:RISC架構變得越來越受歡迎架構
- 為什麼NoSQL資料庫這麼受歡迎?SQL資料庫
- 物聯網路卡為什麼那麼受歡迎
- Tarjan(連通性相關) 筆記筆記
- iPhone7受歡迎的原因?(蘋果企業開發者賬號)iPhone蘋果
- 為什麼React Native如此受歡迎的7個原因React Native
- 2015年將受歡迎的10大Web框架Web框架
- 微信官方資料披露:什麼樣的文章更受歡迎
- 什麼樣的工程師更受大公司的歡迎?工程師