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対< INT、INT > 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 = 0。int型の 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 }
私は証明するために上がってくることでしょう。
人間の本質は鳩です