poj 2762 強連通 判斷鏈

2021-06-22 05:41:43 字數 1126 閱讀 6820

思路:首先當然是要縮點建新圖,由於題目要求是從u->v或從v->u連通,顯然是要求單連通了,也就是要求一條長鏈了,最後只需判斷鏈長是否等於新圖頂點個數即可,至於如何求一條鏈長,直接dfs即可,注意點就是dfs是要從入度為0的頂點開始。

1 #include2 #include3 #include4 #include5 #include6 #include7

using

namespace

std;

8#define maxn 1010910

intlow[maxn],dfn[maxn],color[maxn];

11bool

mark[maxn];

12int

to[maxn];

13int

n,m,cnt,_count,ans;

1415 vectorint> >map;

16 vectorint> >graph;

17 stacks;

1819

void tarjan(int

u)20

else

if(mark[v])32}

33if(low[u]==dfn[u])while(u!=v);42}

43}4445

void dfs(int

u)4655}

56}5758

intmain()

5971 memset(dfn,0,(n+2)*sizeof(int

));72 memset(to,0,(n+2)*sizeof(int

));73 memset(mark,false,(n+2)*sizeof(bool

));74

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

77for(int i=1;i<=n;i++)83}

84}85 ans=1;86

for(int i=1;i<=_count;i++)88}

89 (ans==_count)?puts("

yes"):puts("no"

);90}91

return0;

92 }

view code

POJ 2762 強連通分量

剛剛在算導上學會用兩次dfs求scc,終於過了前段時間群賽的乙個題。題意 給定乙個有向圖,讓你求它是否為半連通圖 即對於圖中任意兩個頂點u,v 是否有u可以到達v或者v可以到達u 解題思路 當時還不知道啥強連通分量,看了人家的一篇部落格,了解了下解題思路,就是先求強連通分量 縮點,得到縮點以後的da...

POJ 2762 強連通分量

剛剛在算導上學會用兩次dfs求scc,終於過了前段時間群賽的乙個題。題意 給定乙個有向圖,讓你求它是否為半連通圖 即對於圖中任意兩個頂點u,v 是否有u可以到達v或者v可以到達u 解題思路 當時還不知道啥強連通分量,看了人家的一篇部落格,了解了下解題思路,就是先求強連通分量 縮點,得到縮點以後的da...

poj2762 Tarjan dp找最長鏈

給定一副有向圖,選擇兩個點v和u,要求v能到達u或者u能到達v。問是否可以對於圖中的每乙個點對都能滿足條件?輸出yes或no。強連通分量中的點可以看作乙個點,所以先tarjan縮點。然後當且僅當縮點圖是一條鏈時才能滿足任意乙個點對都能從一點到達另一點。因為如果縮點圖有分叉,則分叉之間一定是不可達的。...