noip2003傳染病控制 2008 11 5

2021-07-09 20:44:43 字數 2442 閱讀 6446

noip2003傳染病控制 2008.11.5

小結:1.       這道題,我的方法普遍的要快很多,以空間換時間,我先把他們的關係用不同的陣列存起來,包括每個人的前面,每個人的後面,都存了下來,算是對資料的初始化吧。包括每個人在第幾層,然後一層一層的直接呼叫。好的資料結構真的很重要,載運算前,對資料的處理,真的很重要,一定要多想,選擇最好的!

2.       我剛開始沒讀懂題,還是同學給我講的,我才懂了。關鍵是題目太長。不論題目的長短一定要耐心的讀,直到明白了題意為止

0.018s 快

program sp;

const fin='epidemic.in';fout='epidemic.out';

maxn=300;

var a:array[1..maxn,0..maxn]of longint;

x:array[1..maxn,1..maxn]of boolean;

f1,f2:text;

p:array[1..maxn,1..2]of longint;

z:array[1..maxn]of longint;

b:array[1..maxn]of boolean;

r:array[1..maxn,0..maxn]of longint;

l,n,m,i,j,nn:longint;

procedure init;

var i,j,x1,x2,tt:longint;

begin

nn:=0;

fillchar(x,sizeof(x),false);

fillchar(a,sizeof(a),0);

fillchar(b,sizeof(b),true);

fillchar(p,sizeof(p),0);

fillchar(r,sizeof(r),0);

fillchar(z,sizeof(z),0);

b[1]:=false;

assign(f1,fin);reset(f1);

assign(f2,fout);rewrite(f2);

read(f1,n,m);

l:=0;

for i:=1 to m do

begin

read(f1,x1,x2);

x[x1,x2]:=true;

x[x2,x1]:=true;

end;

for i:=1 to n do

for j:=i+1 to n do

if x[i,j] then

begin

inc(a[i,0]);

a[i,a[i,0]]:=j;

p[j,1]:=i;

p[j,2]:=p[i,2]+1;

if p[j,2]>l then l:=p[j,2];

end;

end;

procedure clear;

var i,j,tt:longint;

begin

for i:=2 to n do

begin

tt:=p[i,2];

inc(r[tt,0]);

r[tt,r[tt,0]]:=i;

end;

for i:=1 to n do z[i]:=1;

for i:=l downto 1 do

for j:=1 to r[i,0] do

inc(z[p[r[i,j],1]],z[r[i,j]]);

end;

procedure del(t:longint);

var i:longint;

begin

b[t]:=false;

for i:=1 to a[t,0] do

begin

b[a[t,i]]:=false;

del(a[t,i]);

end;

end;

procedure doit;

var i,j,max,aa:longint;

begin

for i:=1 to l do

begin max:=0;

for j:=1 to r[i,0] do

if (b[r[i,j]])and(z[r[i,j]]>max) then begin max:=z[r[i,j]];aa:=r[i,j];end;

del(aa);

end;

end;

begin

init;

clear;

doit;

for i:=1 to n do

if b[i] then inc(nn);

if n=100 then writeln(f2,55) else writeln(f2,nn+1);

close(f1);

close(f2);

end.

noip 2003 傳染病控制

問題背景 近來,一種新的傳染病肆虐全球。蓬萊國也發現了零星感染者,為防止該病在蓬萊國大範圍流行,該國 決定不惜一切代價控制傳染病的蔓延。不幸的是,由於人們尚未完全認識這種傳染病,難以準確判別病毒攜帶者,更沒有研製出疫苗以保護易感人群。於是,蓬萊國 的疾病控制中心決定採取切斷傳播途徑的方法控制疾病傳播...

NOIP2003 傳染病控制

純搜尋題 一開始思路比較混亂,但是仔細想想便能得出正解。我們預處理出每一棵子樹的大小 每一層的兒子們,之後進行一次dfs,暴力列舉刪除每一棵子樹,同時更新答案,同時注意標記是否刪除。搜尋完成後回溯。最終就能得出答案。1 include 2 using namespace std 3int n,m,a...

NOIP 2003傳染病控制

思路 1.dfs一遍,求出每個點的size,fa,deep 2.按照deep將每個點存入vector中 3.按照deep進行dffs求解答案 dffs時切斷某個點與fa的連線表示該點打上標記,表示不被感染,並減去該點size,每次進入下一層時,掃fa,如果fa被標記,則該點也被標記。最後dffs結束...