描述
在乙個遙遠的國度,一側是風景秀美的湖泊,另一側則是漫無邊際的沙漠。該國的行政區劃十分特殊,剛好構成乙個n 行m 列的矩形,如上圖所示,其中每個格仔都代表一座城市,每座城市都有乙個海拔高度。
為了使居民們都盡可能飲用到清澈的湖水,現在要在某些城市建造水利設施。水利設施有兩種,分別為蓄水廠和輸水站。蓄水廠的功能是利用水幫浦將湖泊中的水抽取到所在城市的蓄水池中。
因此,只有與湖泊毗鄰的第1 行的城市可以建造蓄水廠。而輸水站的功能則是通過輸水管線利用高度落差,將湖水從高處向低處輸送。故一座城市能建造輸水站的前提,是存在比它海拔更高且擁有公共邊的相鄰城市,已經建有水利設施。由於第n 行的城市靠近沙漠,是該國的乾旱區,所以要求其中的每座城市都建有水利設施。那麼,這個要求能否滿足呢?如果能,請計算最少建造幾個蓄水廠;如果不能,求乾旱區中不可能建有水利設施的城市數目。
輸入輸入檔案的每行中兩個數之間用乙個空格隔開。輸入的第一行是兩個正整數n 和m,表示矩形的規模。接下來n 行,每行m 個正整數,依次代表每座城市的海拔高度。
輸出輸出有兩行。如果能滿足要求,輸出的第一行是整數1,第二行是乙個整數,代表最少建造幾個蓄水廠;如果不能滿足要求,輸出的第一行是整數0,第二行是乙個整數,代表有幾座乾旱區中的城市不可能建有水利設施。
樣例輸入[複製]
【輸入樣例1】
2 59 1 5 4 3
8 7 6 1 2
【輸入樣例2】
3 68 4 5 6 4 4
7 3 4 3 3 3
3 2 2 1 1 2
樣例輸出[複製]
【輸出樣例1】11
【輸出樣例2】13
提示【樣例1 說明】
只需要在海拔為9 的那座城市中建造蓄水廠,即可滿足要求。
【樣例2 說明】
上圖中,在3 個粗線框出的城市中建造蓄水廠,可以滿足要求。以這3 個蓄水廠為源頭
在乾旱區中建造的輸水站分別用3 種顏色標出。當然,建造方法可能不唯一。
【資料範圍】
這題資料很小,於是看到題就當碼量進行練習了
第乙個問題說白了就是乙個連邊寬搜(我用的dfs)然後判斷否每個都覆蓋到了,很簡單
第二問首先可以證明如果乙個蓄水庫出去,能覆蓋的最後一排的城市一定是連續的
證明:如果中間有斷點,由於兩邊都被覆蓋,形成了乙個封閉的空間,其他蓄水庫的水要進去必然與之相交,必然不會覆蓋,與原設全部覆蓋矛盾
然後至於怎麼判斷就是乙個至少要幾個線段能覆蓋全部的問題
轉化了之後發現按照左端點排序可以獲得乙個dp方程
在排序後第i個區間j點有dp[j]=min(dp[j],dp[l-1]+1),注意初始化
由於資料很小直接暴力更新就行了,如果資料很大就需要用資料結構比如線段樹進行維護了
乙個小技巧統計每個蓄水庫的左右覆蓋端點的時候可以在dfs裡面直接更新,雖然沒什麼卵用
**:
1 #include2 #include3 #include4 #include5#define n 2000005
6using
namespace
std;
7int max0=-1,min0=99999999;8
struct
nodee[n];
11struct
tp[n];
14int first[n],nxt[n],cnt,tot,vis[n],l[n],r[n],a[600][600],n,m,dp[507
];15
void add(int u,int
v)21
int dx[4]=;
22int dy[4]=;
23void dfs(int
x)30 max0=max(max0,x);
31if(x>m*(n-1
))32 min0=min(min0,x);33}
34bool
cmp(t a,t b)
37int
main()43}
44for(int i=1;i<=n;i++)52}
53}54}
55for(int i=1;i<=m;i++)
58int impossible=0;59
for(int i=1;i<=m;i++)63}
64if
(impossible)
69 cout<<1
<
70for(int i=1;i<=m;i++)
78 sort(p+1,p+tot+1
,cmp);
79 memset(dp,0x3f3f3f3f,sizeof
dp);
80 dp[0]=0;81
for(int i=1;i<=tot;i++)85}
86 cout<
87 }
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列的矩形,如上圖所示,其中每個格仔都代表一座城 市,每座城市都有乙個海拔高度。為了使居民們都盡可能飲用到清澈的湖水,現在要在某些城市建造水利設施。水利設施 有兩種,分別為蓄水廠和輸...