BZOJ1124 [POI2008]撃つ-Mafの[貪欲(未完証明)+トポロジカルソート]をBZOJ1124:[POI2008]撃つ-Mafの

Tucao:数時間をバックル、一般的な考え方がありますが、証明は貪欲ではありません、

サイケは長い時間のために、結果コードについて考えていないと、コードはコードではありません。

深く叫び、他の人がコードの完全な20行を最後に、右書かれていない多くの行を書き、自分の力が悪いのコードに感謝


多くの図の通信部、具体的には以下の形態が存在し得るように、最初のn個の点、各々が、一方の側を指摘:以下は人口GABのHuであってもよいです。

  • リング
  • プライベートグループ玉木
  • ツリーは、ループバックのセットポイントを持っています

これらの3つは、森林を構成しています。

どのように多くの人が死に見上げます。

  • リングは$ SIZ-1 $の場合
  • ベースリングのツリーの葉(NO浸透)内のツリーのその部分だけが生き残ることができます。図面を理解する上で例援助。
  • 自己とのツリーリング:同上

最低限迷惑どのように多くの人々を見て死にました

  • リング:$ \ lfloorの\のFRAC {N + 1} {2} \ rfloor $
  • ツリー内のシクロアルキル基:トポロジカルソートは、チーム全体0度に適用されるので、デッドポイントを治療し、開かれた火のポイントは削除されました。
  • 自己とのツリーリング:同上

そして、処理されたトポロジの変更の上記の3つの形式の後に:

  • リング:変わらず
  • プライベートツリーリング:リングは休むこと、またはそれらが破壊され、その結果、残されていなかったので、
  • ツリー:それは自己ループまたは全く休みかもしれ

その後、トポロジカルソートを行う、これは貪欲である理由については、私は厳格な証明をできませんでした。クライ。

最初の木のために、確かに葉からは、すべての父を殺すために開始し、その後、父の父が生きていた、ショットをアップし続ける......これは、他の順序よりも優れています。

言葉のリングにも共感。そして、リング内に、私は木を認めていません。木にぶら下がっリングは、根がポイントのポイントを殺すことなく、キルリング上で見つけることができるならば答えは、リングの何の効果ではありません。

だから延長行である木の部分を見てください。リングは木の多くをハングアップすること?この人生は、私は間違いなく彼のカードを出すでしょう。

とにかく、最初のトポロジカルソートは、統計ANSに付随して、リングからのみリングを残し、その後、内部のこれらのリングで回答を処理します。

実際に、私はコードの厚かましいコピーでした。実際に行っていないあなた自身を書きます。今年は例外的なコピーコード、もはやコピーされた年の終わりに

:神々の下での支払いのための問題BZOJ1124は:[POI2008]のMafを銃撃戦おかげで指導。侵略は削除しました。

1の#include <iostreamの>
 2の#include <cstdioを>
 3の#include <CStringの>
 4の#include <アルゴリズム>
 5の#include <cmath>
 6の#include <キュー>
 7  の#define DBG(X)CERR << #X << "=" << X << ENDL
 8を 用いて 、名前空間STDを、
9 typedefの長い 長いLL。
10 typedefをダブルデシベル。
11のtypedef対< INTINT > PII。
12テンプレート<型名T>インラインT _min(TA、TB){ 戻り A <Bを?A:B;}
13テンプレート<型名T>インラインT _max(TA、TB){ 戻り A> B?:B;}
 14テンプレート<型名T>インラインチャー MIN(T&A、TB){ 戻り A> B(A = B、?1):0 ;}
 15テンプレート<型名T>インラインチャー MAX(T&A、TB) { 戻り <Bを(A = B、?1):0 ;}
 16テンプレート<型名T>インラインボイド _swap(T&A、T&B){A ^ = B ^ = A ^ = B;}
 17テンプレート<型名T>インラインTリード(T&X){
 18      、X = 0int型の F = 0; char型の C; しばらく(isdigit(C = getchar関数())!)の場合(C == ' - ')は、f = 1 ;
19      一方(isdigit(c)参照)、X = X * 10 +(C&15)、C = GETCHAR()。返す fはX = - ?X:X;
20  }
 21  のconst  int型 N = 1E6 + 7 22  INT [N]、IND [N]であり;
23  int型N、maxlive、minlive。
24  int型Q [N]、デッド[N]、CIR [N]。
25  
26  INTメイン(){ // freopenは( "test.in"、 "R"、STDIN)。// freopenは( "test.outに"、 "W"、STDOUT)。
27      リード(N)
28      のためには、(登録をint i = 1 ; iが<= N; I ++)++、([I])が読み出され、IND [i]を[します]
29      のために(登録をint i = 1 ; iが<= N; ++ i)の場合(!IND [i])と++ minlive、Q [++ maxlive] = I。
30      のための(レジスタint型、L = 1、L <= maxlive; ++ L){
 31          のint Y = [Q [L]であり;
32          であれば(デッド[Y])続けます33          デッド[Y] = 1、= [Y]に] CIR1 ;
34          であれば(!( - IND [する[Y]))qは[++ maxlive] = [Y]であり;
35      }
 36      (登録をint i = 1 ; iが<= N; I ++)場合(!デッド[I] && IND [I]){
 37          INT SIZ = 0、P = 0 38          のために(登録int型 J =私は、死んだ[j]があり、j = [J]に!)死んだ[J] = 1、++ SIZ、P | = CIR [j]を、
39          もし(P &&(SIZ>!の1))++ minlive。
40          maxlive + = SIZ / 2 41      }
 42     戻りのprintf(" %D%D \ N "、N-maxlive、N- minlive)、0 43 }
コードの表示

私は証明するために上がってくることでしょう。

人間の本質は鳩です

おすすめ

転載: www.cnblogs.com/saigyouji-yuyuko/p/11454974.html