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