優れたコミュニケーション単純な定義:
リングまたは位相リングの複数のセット、
通信の任意の強力な点は、それぞれに到達することができ
簡単な手の強連結、
1-> 2-> 3-> 1
どのように我々は強く接続するコンピュータが人間の思考プロセスの目にそれをシミュレートさせることができ、
確かに、通信側に従う図トラバーサルケースです、
ここでは、DFSのBFSより明確に、より適している、私たちは順番にトラバースの1-> 2 - > 3
コンピュータが強く接続されているかを決定するようにその側を特徴縁3-> 1、に次は、必要があります
私たちは、その見つかりました:
1)第1号点が横断されています
2)これは裏面側であります
我々は、各トラバースポイント時間の前と後に保存されたのDFN量を設定することができるように
今、私たちは私たちが何に強く接続を見つけることを参照してください。
1)いくつかの強連結コンピューティングがあります。
2)環が除去され、それは減少点tarjan呼ばれ
)1の目的のためにそう
私たちの数は、強連結の各エンドポイントのために入金しなければなりません
最初のポイントは、そのトラバーサルです
この機能(および相違の他の点)があるのその点?
その答えは、彼がサイドを返さなかったことで、以前の彼はDFNよりもポイントに来なくて、彼の子ノードトラバーサルです
その後、我々はトンと呼ばれる最初の、量の記録を見つけることができ、
Tのこの最小値は、DFNの各ノード点に記録されなければなりません
(つまり、DFN下限最小以来の最高点DFN、彼の大きなDFN以外の、そして私たちが記録したいです)
だから我々は、名前が重複するのは簡単、楽しい、低にトンを置きます
アイデアは、ない横断ポイントトラバーサルを見て、出てきました
場合はノード3、トラバースポイントは、その彼のDFN一定の小さながある場合は、ランデブーに到達するために探して、
私たちは、ノード3を更新します
この中間点はまた、次いで2-> 3後、さらに2 DFN更新され、変更されたDFN、2を作るために
だから我々は、構造体から出てきました
しかし、ポイントを通過した者は、見上げ何か強連結成分なので、スタック、それぞれが終了した可能性が強く接続
PS:
1)tarjan点が強く接続された単一考えることができます
2)最大強連結成分ではなく、小さなチューブが見出される場合
以下のために(int型 I = 1 ;私は++; iが<= N)// 时间戳1:访问过没有代表 場合(!DFN [i])とtarjan(I); ブールF [N]。 スタック < int型 > S; INT DFN [N]、低[N]、ANS。 ボイド tarjan(INT X) { のprintf(" %D%D \ n "、X、TT + 1 )。 DFN [X] =低[X] = ++ TT。 s.push(x)は、[X] fは = 真。 用(int型 ; I I = I =ヘッド[X] E [i]の.nx) { int型V = E [I] .V。 もし(!DFN [V]) { tarjan(V)。 printf(" 1:%Dを\ n " 、V); もし(低[X]>低[V])のprintf(" の\ n " ); 低[X] = 分(低[x]は、低[V])。 } そう であれば([V] F) { のprintf(" 2:%Dを\ n " 、V); もし(低[V]> =低[X])のprintf(" Bに\ n " ); 低[X] =分(低[x]は、低[V])。//ここでタイムスタンプ比較、タイムスタンプが示しているので、サイズが持っている } } IF(低[X] == DFN [X]) { 一方(s.top()!= X)F [s.top()] = falseに、s.pop(); F [X] = falseに、s.pop(); ANS ++ ; } }
2の目的のために)
質問を見て!
poj2186人気の牛
、nは持って礼拝の関係をM、そして礼拝が推移であるあなたの牛を知らせる、そして礼拝B、B崇拝C、礼拝のCあれば、いくつかの牛は最終的にはすべての牛の崇拝を求めてきました。
スーパーソースに> - 強連結成分:思考のポイントを凝縮
スーパーソース、FAに代表される、または新しい合計を使用= N、++もOKの和
主な違い:
もし(DFN [U] == 低[U]) { 色[U] = ++ 和。 VIS [U] = 0 ; 一方、(![トップ] =スタックU) { [トップ] [スタック]色 = 和; VIS [スタック[トップ - ] = 0 ; } トップ - 。 }
強連結外側を区別するためにエッジ点を凝縮した後、なお、強く接続され、
統計の程度は、改めて注意を払う必要があります