強連通分量SCC

2021-06-22 08:50:17 字數 716 閱讀 8568

poj2762

題意:給出n個點,對於每個點,如果任意選擇兩點s,e,都滿足s可以到達e或者e可以到達s,則輸出yes,否則輸出no。

用了白書裡的模板

參考解決思路是:首先求出原圖g的強連通分量並且縮點,求出縮點後的圖mat,並且求出縮點後所有頂點的入度in。

這時我們思考下,如果原圖g要是半連通的,那麼縮點後的圖mat必須要連通,這是基礎的前提,不然原圖都是不連通的,這時只要判斷mat中頂點是否只有乙個入度為0的點,否則圖g不是半連通的。此外,mat就是一棵樹,入度為0的頂點就是根,如果這個樹不是一條鏈,那麼圖g也不是半連通的,不是鏈就說明有分叉,兩個分叉之間是不能到達的,那麼如何判斷是否有分叉呢?答案是拓撲排序,如果排序到某個節點後,剩下的順序不能確定,就說明出現了分叉。

#include#include#include#include#include#define n 10010

using namespace std;

vectors;

vectorg[n],g2[n],mat[n];

bool vis[n];

int sccno[n],ru[n];

int n,m;

int scc_cnt;

void dfs1(int u)

}}void topsort()

{ int i,j,u,v;

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

{for(j=0;j

SCC(強連通分量)

1.定義 在有向圖g中,如果兩個頂點間至少存在一條路徑,稱兩個頂點強連通 sc strongly connected 有向圖中的極大強連通子圖,成為強連通分量 scc strongly connected components 下圖中,子圖為乙個強連通分量,因為頂點1,2,3,4兩兩可達,也分別是兩...

強連通分量(SCC)模版

如題,模版如下 scc cnt為scc計數器,sccno i 為i所在的scc編號 scc cnt為scc個數,scc的 編號從1開始 vector g maxn 圖存在g maxn 中,若有一條從v u的邊,則儲存時先v u 再g v push back u 即結點從0開始編號 int pre m...

kosaraju求scc 強連通分量

題目要求 大學班級選班長,n 個同學均可以發表意見 若意見為 a b 則表示 a 認為 b 合適,意見具有傳遞性,即 a 認為 b 合適,b 認為 c 合適,則 a 也認為 c 合適 勤勞的 tt 收集了m條意見,想要知道最高票數,並給出乙份候選人名單,即所有得票最多的同學,你能幫幫他嗎?input...