蕾姐講過的例題..玩了兩天後才想起來做 貌似省賽之後確實變得好懶了...再努力兩天就可以去北京玩了!
順便借這個題記錄一下求強連通分量的演算法
1 只需要一次dfs 依靠stack來實現的tarjan演算法 每次走到乙個點 馬上把它壓入棧中 每次對與這個點相連的點處理完畢 判斷是否low[u]==dfn[u] 若是 開始退棧 直到棧頂元素等於u才退出(當棧頂元素等於u也需要pop) 每次一起退棧的點屬於同乙個強連通分量 儲存圖可以用鏈式前向星也可以用鄰接矩陣更可以用vector 蕾姐說不會超時 我信了
2 需要兩次dfs的kosara 在輸入圖的時候需要搞出來乙個反向圖以便第二次dfs使用 開始進行一次dfs 每當乙個點要離開的時候就將其壓入棧中 當所有的點都被遍歷後 從棧頂元素開始進行反向搜尋 一次搜到的點屬於同乙個強連通分量 其實..也需要用到棧...
需要注意的是 當使用tarjan時 dfs時如果判斷dfn[v]時已經有了值 在else中需要有if條件(!id[v])
#include#include#include#include#include#include#include#includeusing namespace std;int n,m;
int id[10050];
int dfn[10050];
int low[10050];
int ans[10050];
int cd[10050];
int point[10050];
int num;
int cnt;
int tot;
vectorq[10050];
stacks;
void init()
num=cnt=tot=0;
while(!s.empty())
s.pop();
}void dfs(int u)
for(int i=1;i<=n;i++)
jt();
did();
}}
poj 2186 強連通縮點
題意 有n只奶牛,奶牛有自己認為最受歡迎的奶牛。奶牛們的這種 認為 是單向可傳遞的,當a認為b最受歡迎 b不一定認為a最受歡迎 且b認為c最受歡迎時,a一定也認為c最受歡迎。現在給出m對這樣的 認為.的關係,問有多少只奶牛被除其本身以外的所有奶牛關注。思路 既然有單向傳遞關係,那麼關係圖可能就形成了...
POJ 2186 強連通分量
比較簡單吧。套模板。gabow include cstdlib include cctype include cstring include cstdio include cmath include algorithm include vector include string include io...
Poj 2186 強連通分量
題目大意 分析題解 個人 view code 1 10180085 perseawe 2186 accepted 1424k 79ms pascal 2645b 2012 05 10 19 54 27 23 var 4 n,m,tot,numofblocks,time,top longint 5 d...