【のDFS] [アナログネットワークフロー] Luogu P4189スタートレック

タイトル説明

AD 3000 3 0 0 0年、地球同盟は天の川の中に取り込まれたN 、N個の惑星、資金の考慮の外に、政府が間に唯一の惑星を確立N-1 N - 任意の2つの惑星の1双方向タイムトンネル保証互いの間にアップ。管理上の考慮事項は、最初に私は私の惑星は、1年以内の最高経営責任者(CEO)の各市民は時空のトンネルの使用から惑星の数を超えてはならないことを要求H_I H I (あなたが持っている場合は、この統計は、休暇の数の統計に基づいている回惑星から残された使用H_I H I 回、そして今年、あなたはもう)は、この惑星を残すために、時間のトンネルを使用することはできません。ルイPaosenは、恒星間旅行者が、彼はできるだけタイムトンネルを何度も使用したいと考えているが、惑星が最終的にあまりにも過酷な状況を解決することを余儀なくされたしたくないです。そこで彼は、各惑星のために知っているしたいと考えている私はからかどうかは、0 0惑星を開始し、最終的に、までお時間トンネルを使用できる回数に向かう途中で、このようなスタートレックのように地球の終わりのための数i、。

 

問題の解決策

  • 最初の非常に良好な状態は、その後、我々はできるから、各点の数がこの程度点以上である制限があり、0スタートD F S木の上。

     

  • 次いで場合、エッジによって接続された2つの点Hながら> 0は、その後、前後に移動し、その後、我々はから行くと考え0番ノードは、各ノードに行きます

     

  • この時点での場合はUのU H > 0、それに直接アクセスしてください

     

  • そうでなければ、我々はからご注文のuに来V、最後の時間しなければならないのU Vの出土が離れて削除、彼らは次のようになり、V+1の場合は、Vの息子の周波数ではない0、そして1は、出土し続けることができます

 

コード

1の#include <cstdioを>
 2の#include <CStringの>
 3の#include <iostreamの>
 4  の#define N 50010
 5  使って 名前空間STD。
6  int型ヘッド[N]、CNT、H [N]、ANS [N]、ここで、P [N]、N。
7  構造体の縁{ INT  からの、。} E [N << 1 ]。
8  ボイドインサート(INT U、INT V){E [++ CNT]。E [CNT] .TO = V;頭部[U] = [U]ヘッド= CNT。}
 9つのボイド DFSは(int型 Uを、INT FA)
 10 {
  11      のためにint型 ; I。I = E [i]はi =頭部[U]、X、V から12          であれば(!E [i]は.TO = FA)
 13          {
 14              V = E [I] .TO 、DFS(V、U)、X = 分(H [U]、H [V])。
図15は、              今+ = X * 2、H [U] - = xで、H [V] - =のX。
16              であれば(H [V])P [U] = V。
17          }
 18  }
 19  空隙 DFS2(int型 Uを、INT FA)
 20  {
 21の      ANS [U] = 今。
22      のためのint型iは=頭部[U]; I; I = E [I]。23 なら!E [i]を.TO =(FA)
 24         {
 25 のint V = E [I] .TO。
26 であれば(H [U])H [U] - 、今++、DFS2(V、U)、H [U] ++、now-- 27 他の場合(P [V])H [P [V]] - 、今++、DFS2(V、U)、H [P [V]] ++、now-- 28  H [V] ++、今- 、DFS2(V、U)、H [P [V]] - 、今++ 29         }
 30 }
 31 のint main()の
 32 {
 33      のscanf(" %d個"、&N)
34                                                                        以下のためにint型 i = 1 ; iが<= N; iは++)scanf関数を(" %のD "、&H [I])。
35      のためには、int型 iは= 1 ; iがn <; Uは、V iは++)scanf関数を(" %d個の%dを" Uを、&​​、&V)、uは++、V ++、インサート(u、v)は、インサート(V、U) H [U] - 、H [V] - 、今+ = 2 ;
36の      DFS(10)、DFS2(10 );
37      のためには、int型 i = 1 ; iが<= N; iが++)のprintf(" %d個の\ n " 、ANS [I])を、
38 }

 

おすすめ

転載: www.cnblogs.com/Comfortable/p/11237274.html