noip模擬賽5 水流

2022-05-01 17:18:08 字數 1441 閱讀 5648

描述

全球氣候變暖,小鎮a面臨水災。於是你必須買一些幫浦把水抽走。幫浦的抽水能力可以認為是無窮大,但你必須把幫浦放在合適的位置,從而能使所有的水能流到幫浦裡。小鎮可以認為是n * m的矩陣。矩陣裡的每個單元格都是乙個『a』- 『z』小寫字母,該小寫字母表示該格仔的高度,字母大的表示該單元格比較高,反之,表示該格仔高度比較低。當前單元格的水可以流到上、下、左、右四個格仔,但必須滿足這些格仔的高度是小於或者等於當前格仔的高度。現在,給你一些n * m的矩陣,你至少要買多少個幫浦,才能把所有格仔的水都能被抽走?

輸入多組測試資料。

第一行:k,表示有k組測試資料。(1<=k<=5)

接下來有k組測試資料,每組測試資料格式如下:

第一行:兩個正數, n,m 。 1<=n,m<=50,表示小鎮的大小。

接下來有n行,每行有m個小寫字母,表示小鎮的地圖。

輸出共k行,每行對應一組資料。至少要買多少個幫浦,才能把所有格仔的水都能抽走。

輸入樣例 1 

2 

5 5

ccccc

cbbbc

cbabc

cbbbc

ccccc

4 9

cbabcbabc

cbabcbabc

cbabcbabc

cbabcbabc

輸出樣例 1

1

2思路:對當前最低位置進行dfs染色即可

#includeusing

namespace

std;

//input

#define rep(i,a,b) for(int i=(a);i<=(b);i++)

#define ri(n) scanf("%d",&(n))

#define rii(n,m) scanf("%d%d",&n,&m);

#define riii(n,m,k) scanf("%d%d%d",&n,&m,&k)

#define rs(s) scanf("%s",s);

#define ll long long

#define rep(i,n) for(int i=0;i

#define clr(a,v) memset(a,v,sizeof a)

/////////////////////////////////

/#define n 60

int dx[4]=;

int dy[4]=;

intn,m;

int inmap(int x,int

y)char

mp[n][n];

intvis[n][n];

void dfs(int x,inty)}

intmain()

cout}}

view code

noip模擬賽 密碼

表示沒看懂演算法3 問題描述 有壓迫,就有反抗。mored的寵物在法庭的幫助下終於反抗了。作為乙隻聰明的寵物,他打算把魔法使mored的魔法書盜去,奪取mored的魔法能力。但mored怎麼會讓自己的魔法書輕易地被盜取?mored在魔法書上設定了乙個密碼鎖,密碼鎖上有乙個問題。施以斯臥鋪魔法吧,你有...

NOIP模擬賽 老師

題目描述 一座有n層的教學樓裡有一些學生,第i 0 i n 層有studentsi個學生。你被給定了乙個數k,如果第i層有x個學生,那麼這一層需要 x k 個老師。你可以調整每個學生的樓層,但是每個學生至多只能調整一層,就是說第i層的學生只能去第i 1層 如果有的話 第i層 第i 1層 如果i 1 ...

NOIP模擬賽 分錢

題目描述 兩個人在街上撿到了一些錢,這些錢共有n張,他們等了很久也沒有等來失主,於是決定把錢平分。但錢可能無法平分。他們先把能夠平分的錢盡量先平分了,使得剩下不能平分的錢盡量少。這些不能平分的錢怎麼辦呢他?他們決定拿去賭場裡面賭一把。他們運氣太好了,那些不能平分的錢變成了雙倍,於是他們就把那個錢分了...