思路:首先當然是要縮點建新圖,由於題目要求是從u->v或從v->u連通,顯然是要求單連通了,也就是要求一條長鏈了,最後只需判斷鏈長是否等於新圖頂點個數即可,至於如何求一條鏈長,直接dfs即可,注意點就是dfs是要從入度為0的頂點開始。
1 #include2 #include3 #include4 #include5 #include6 #include7view codeusing
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 }
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縮點。然後當且僅當縮點圖是一條鏈時才能滿足任意乙個點對都能從一點到達另一點。因為如果縮點圖有分叉,則分叉之間一定是不可達的。...