繁繁的遊戲

2022-04-30 11:36:07 字數 2276 閱讀 1465

題目描述

繁繁想和小夥伴們打遊戲,遊戲在乙個山莊進行,這個山莊有n座山,編號為1到n,為了方便大家在不同的山之間移動,繁繁建了一些橋,由於技術的原因,橋連線的兩座山的高度差不能超過d,現在已知這些橋,求這個山莊最高的山和最低的山差距最大是多少?資料保證所有山之間都是聯通的。
輸入
第乙個乙個數t,表示測試資料數量(t<=5,2<=n<=50,0<=d<=1000)
每組資料第一行兩個數n和d

接下來乙個n行n列的矩陣,第i行j列為y表示i和j之間建了一座橋,否則表示沒有建保證第i行j列和第j行i列值相同,並且第i行第i列值為n

輸出

t行,每行乙個答案,若最大值可能為正無窮,輸出-1
樣例輸入
3 

3 10

nyn

yny

nyn

2 1

nn nn

6 1000

nnynnn

nnynnn

yynynn

nnynyy

nnnynn

nnnynn

樣例輸出
20 

-1 3000

提示
第乙個樣例,1和2之間不能超過d,2和3之間不能超過d,那麼最大就是1和2差恰好為d,2和3差恰好為d
對於20%的資料,t<=3,n<=40

對於50%的資料,t<=3

對於100%的資料,t<=5,2<=n<=50,0<=d<=1000

//#pragma gcc optimize(3)

#include#include#include#include#include#include#include#include#define max(x,y) ((x)>(y)?(x):(y))

#define min(x,y) ((x)<(y)?(x):(y))

#define swap(x,y) (x^=y,y^=x,x^=y)

typedef long long ll;

using namespace std;

templateinline void read(t &x)

templateinline void print(t x)

const int n=55;

const int inf=0x3f3f3f3f;

int num[n][n];

int n,d;

int main()

for(int k=1; k<=n; k++)

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

for(int j=1; j<=n; j++)

int ans=0;

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

for(int j=i+1; j<=n; j++)

ans=max(ans,num[i][j]);

if(ans==inf)

cout<<-1《所以最短路的最大值。

ps

最短路是基於dp思想的,注意模板,以下這種dp不可取。

貼乙個錯誤的**

//#pragma gcc optimize(3)

#include#include#include#include#include#include#include#include#define max(x,y) ((x)>(y)?(x):(y))

#define min(x,y) ((x)<(y)?(x):(y))

#define swap(x,y) (x^=y,y^=x,x^=y)

typedef long long ll;

using namespace std;

templateinline void read(t &x)

templateinline void print(t x)

const int n=55;

int num[n][n];

int n,d;

ll dp[n];

int main()

}for(int i=1;i<=n;i++)

for(int j=1;j}

ll ans=0;

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

ans=max(ans,dp[i]);

if(ans==0)

cout<<-1

cout<}

return 0;

}

繁繁的遊戲 Floyd

繁繁想和小夥伴們打遊戲,遊戲在乙個山莊進行,這個山莊有n座山,編號為 1 到 n 為了方便大 家在不同的山之間移動,繁繁建了一些橋,由於技術的原因,橋連線的兩座山的高度差不能超過 d 現在已知這些橋,求這個山莊最高的山和最低的山差距最大是多少?輸入格式 第乙個乙個數t,表示測試資料數量 t 5,2 ...

繁繁的數字

題目描述 繁繁今天學習了二進位制,繁繁覺得二進位制很神奇,任何乙個整數都可以由一些互不相同的2的方冪表示,例如7的二進位制是111 2,所以7 4 2 1,繁繁不滿足於此,繁繁在想,如果把互不相同這個條件去掉,會有多少種方案呢?輸入 一行乙個整數n 1 n 1000000 輸出 乙個乙個數,表示答案...

繁繁的佇列

題目描述繁繁有乙個雙向佇列,佇列裡有數字1 n這n個數字,繁繁每次可以從佇列中任意拿出乙個數字,將其放在佇列的頭部或者佇列的尾部,不停這樣操作,直到佇列變成公升序,求最小操作次數。輸入第一行乙個數字n n 50000 接下來n行,每行乙個數字 輸出乙個數表示最小操作次數樣例輸入525 341樣例輸出...