521 NOIP2010 引水入城 cogs

2022-04-06 22:21:24 字數 2705 閱讀 6605

★★★   輸入檔案:flow.in輸出檔案:flow.out簡單對比

時間限制:1 s   記憶體限制:128 mb

在乙個遙遠的國度,一側是風景秀美的湖泊,另一側則是漫無邊際的沙漠。該國的行政區劃十分特殊,剛好構成乙個n行m列的矩形,如上圖所示,其中每個格仔都代表一座城市,每座城市都有乙個海拔高度。

為了使居民們都盡可能飲用到清澈的湖水,現在要在某些城市建造水利設施。水利設施有兩種,分別為蓄水廠和輸水站。蓄水廠的功能是利用水幫浦將湖泊中的水抽取到所在城市的蓄水池中。因此,只有與湖泊毗鄰的第1行的城市可以建造蓄水廠。而輸水站的功能則是通過輸水管線利用高度落差,將湖水從高處向低處輸送。故一座城市能建造輸水站的前提,是存在比它海拔更高且擁有公共邊的相鄰城市,已經建有水利設施。

由於第n行的城市靠近沙漠,是該國的乾旱區,所以要求其中的每座城市都建有水利設施。那麼,這個要求能否滿足呢?如果能,請計算最少建造幾個蓄水廠;如果不能,求乾旱區中不可能建有水利設施的城市數目。

【輸入】

輸入檔名為flow.in。輸入檔案的每行中兩個數之間用乙個空格隔開。

輸入的第一行是兩個正整數n和m,表示矩形的規模。

接下來n行,每行m個正整數,依次代表每座城市的海拔高度。

【輸出】

輸出檔名為flow.out。

輸出有兩行。如果能滿足要求,輸出的第一行是整數1,第二行是乙個整數,代表最少建造幾個蓄水廠;如果不能滿足要求,輸出的第一行是整數0,第二行是乙個整數,代表有幾座乾旱區中的城市不可能建有水利設施。

【輸入輸出樣例1】

flow.in

2 59 1 5 4 3

8 7 6 1 2

flow.out11

【樣例1說明】

只需要在海拔為9的那座城市中建造蓄水廠,即可滿足要求。

【輸入輸出樣例2】

flow.in

3 68 4 5 6 4 4

7 3 4 3 3 3

3 2 2 1 1 2

flow.out13

【樣例2說明】

湖泊8 4 5 6 4 4

7 3 4 3 3 3

3 2 2 1 1 2

沙漠上圖中,在3個粗線框出的城市中建造蓄水廠,可以滿足要求。以這3個蓄水廠為源頭在乾旱區中建造的輸水站分別用3種顏色標出。當然,建造方法可能不唯一。

【資料範圍】

本題共有10個測試資料,每個資料的範圍如下表所示:

測試資料編號能否滿足要求n m

1不能 n≤10 m ≤ 10

2不能 n≤100m≤ 100

3不能 n≤500 m≤ 500

4能 n= 1 m≤ 10

5能 n≤10 m ≤ 10

6能 n≤100 m≤ 20

7能 n≤100 m≤ 50

8能 n≤100 m≤100

9能 n≤200 m≤ 200

10能n≤500 m≤ 500

對於所有的10個資料,每座城市的海拔高度都不超過10^6。

分析:對於第1行每乙個數bfs,得到最後一行是否有水。

於是我們可以做一下判斷。如果最後一行有城市沒有水,說明這個城市是得不到水的,直接輸出0,並計算有多少個城市。

如果成立,那麼可以得到,有水的位置是乙個個區間。(因為沒水的已經排除)

之後問題轉化為:m條線段覆蓋m個點的最少線段數,再貪心。

1 #include2 #include3 #include4

5using

namespace

std;67

const

int maxn = 510;8

struct

water

15}t[maxn];

16struct

nodenxt,cur;

19int

h[maxn][maxn];

20int

v[maxn][maxn];

21int dx[5] = ;

22int dy[5] = ;

23 queueq;

24int n,m,s,e,cnt,ans,p=1

,last;

25int

read()

2629

while(ch>='

0'&& ch<='9')

30return x*f;31}

32void bfs(int x,int

y)3354}

55}56 s =m;

57 e = 0;58

for (int i=1; i<=m; ++i)

59if (v[n][i]==y)

6064 t[++cnt].st =s;

65 t[cnt].en =e;

66 t[cnt].id =y;67}

6869

intmain()

7087 sort(t+1,t+cnt+1

);88

89while (last

9098

else

break;99

}100 ans++;

101 last =t[k].en;

102}

103 printf("

1\n%d

",ans);

104return0;

105 }

NOIP2010 引水入城

兩遍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...

NOIP2010 引水入城

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

NOIP 2010 引水入城

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