UVa : 11838 - Come and Go
問題概要
http://uva.onlinejudge.org/external/118/11838.html
有向グラフが与えられます。
どの2つのノード間でも行ききできるかどうか判定しなさい。
アルゴリズム
強連結成分分解で、グラフが複数に分解されなければ1。
それ以外は0と答えました。
強連結成分分解については、アリ本P267などを参照してください。
プログラム
アリ本のコードを引用しているので、強連結成分分解のコードは、アリ本を参照してください。
int V,E; vector<int> G[MAX_V]; vector<int> rG[MAX_V]; vector<int> vs; bool used[MAX_V]; int cmp[MAX_V]; void init(){省略} void add_edge(int from,int to){省略} void dfs(int v){省略} void rdfs(int v,int k){省略} int scc(){省略} int main(){ while(cin>>V>>E,V||E){ init(); rep(i,E){ int a,b,c; cin>>a>>b>>c; a--; b--; add_edge(a,b); if(c == 2){ add_edge(b,a); } } cout<<(scc()==1 ? 1 : 0)<<endl; } }