上次我講過了kosaraju演算法
這次有更好理解的演算法!
大家來看一下這個題:
每個星球人都夢想著成為啊哈星球中的明星,成為星球人們的偶像。啊哈星球共有n (1<= n <= 10,000)個星球人,現在告訴你m (1 <= m <=50,000) 條星球人間的關係,形如(a,b),意味著星球人a認為星球人b是它心目中的偶像,這種偶像關係可以傳遞,也就是說如果a認為b是它的偶像,b認為c是它的偶像,那麼a也會認為c是它的偶像。你的任務是找出被所有的星球人都當做偶像的星球人的數目。
和kosaraju一樣
只是這次不需要求dfs序
#include #include #include #include using namespace std;
vector e[10009],re[10009];
bool book1[10009],book2[10009];
int c=0,n,m,color[10009],one=0,sum[10009],u[50009],v[50009],out[10009],flag,ans,ss,cnt;
void dfs1(int u)
for(int i=1;i<=n;i++)}}
}for(int i=1;i<=m;i++)
}for(int i=1;i<=cnt;i++)
else}}
printf("%d",ans);
return 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 圖的鄰...
強連通分量
對於有向圖的乙個頂點集,如果從這個頂點集的任何一點出發都可以到達該頂點集的其餘各個頂點,那麼該頂點集稱為該有向圖的乙個強連通分量。有向連通圖的全部頂點組成乙個強連通分量。我們可以利用tarjan演算法求強連通分量。define n 1000 struct edge e 100000 int ec,p...
強連通分量
在有向圖g中,如果兩個頂點間至少存在一條路徑,稱兩個頂點強連通 strongly connected 如果有向圖g的每兩個頂點都強連通,稱g是乙個強連通圖。非強連通圖有向圖的極大強連通子圖,稱為強連通分量 strongly connected components 下圖中,子圖為乙個強連通分量,因為...