NOIP2010 引水入城

2021-05-26 21:24:03 字數 1941 閱讀 3530

兩遍bfs+floodfill,第一遍bfs可以判斷出最後是輸出0還是輸出1,第二遍bfs+floodfill不懂……

program flow;

const

dx:array [1..4] of -1..1=(-1,0,1,0);

dy:array [1..4] of -1..1=(0,1,0,-1);

type atp=record

x,y:longint;

end;

var n,m,head,tail:longint;

f,st,ed:array [-1..500] of longint;

col:array [-1..500,-1..500] of longint;

a:array [-1..500,-1..500] of longint;

que:array [-1..1000000] of atp;

procedure init;

var i,j:longint;

begin

readln(n,m);

for i:=n downto 1 do

begin

for j:=1 to m do read(a[j,i]);

readln;

end;

end;

procedure bfs1(x,y:longint);

var i,tx,ty:longint;

begin

head:=0;

tail:=1;

que[1].x:=x;

que[1].y:=y;

col[x,y]:=1;

while head0) and (tx<=m) and (ty>0) and (ty<=n) and (col[tx,ty]=0) and (a[tx,ty]0 then

begin

writeln(0);

writeln(tans);

close(input);

close(output);

halt;

end;

end;

procedure bfs2(x,y:longint);

var color,tx,ty,i:longint;

begin

color:=x;

head:=0;

tail:=1;

que[1].x:=x;

que[1].y:=y;

col[x,y]:=color;

while head0) and (tx<=m) and (ty>0) and (ty<=n) and (col[tx,ty]=0) and (a[tx,ty]>a[que[head].x,que[head].y]) then

begin

inc(tail);

que[tail].x:=tx;

que[tail].y:=ty;

col[tx,ty]:=color;

end;

end;

end;

end;

function min(x,y:longint):longint;

begin

if x=i) and (st[j]<=i) then f[i]:=min(f[i],f[st[j]-1]+1);

end;

end;

writeln(1);

writeln(f[m]);

end;

begin

assign(input,'flow.in'); reset(input);

assign(output,'flow.out'); rewrite(output);

init;

main1;

main2;

close(input); close(output);

end.

NOIP2010 引水入城

4引水入城在乙個遙遠的國度,一側是風景秀美的湖泊,另一側則是漫無邊際的沙漠。該國的行政區劃十分特殊,剛好構成乙個n 行m 列的矩形,如上圖所示,其中每個格仔都代表一座城市,每座城市都有乙個海拔高度。為了使居民們都盡可能飲用到清澈的湖水,現在要在某些城市建造水利設施。水利設施有兩種,分別為蓄水廠和輸水...

NOIP 2010 引水入城

題目描述 在乙個遙遠的國度,一側是風景秀美的湖泊,另一側則是漫無邊際的沙漠。該國的行政 區劃十分特殊,剛好構成乙個n行m列的矩形,如上圖所示,其中每個格仔都代表一座城 市,每座城市都有乙個海拔高度。為了使居民們都盡可能飲用到清澈的湖水,現在要在某些城市建造水利設施。水利設施 有兩種,分別為蓄水廠和輸...

NOIP2010 引水入城

模擬考試的時候因為前面的題耗時太嚴重,所以沒有寫 對於第一行的每乙個城市。我們能夠預處理出在這座城市建立蓄水廠,水流能到達最以下一行的哪些城市 假設終於的題目是有解的,那麼最後一行這些被覆蓋的城市是連續的。反證 假設水流到達最以下一行的城市是斷開不連續的,則說明中間有城市海拔比四周都高,其它城市過來...