pat L3 011 直搗黃龍 dfs簡單應用

2021-07-28 11:38:09 字數 2042 閱讀 9939

時間限制

150 ms

記憶體限制

65536 kb

**長度限制

8000 b

判題程式

standard

作者 陳越

本題是一部戰爭大片 —— 你需要從己方大本營出發,一路攻城略地殺到敵方大本營。首先時間就是生命,所以你必須選擇合適的路徑,以最快的速度占領敵方大本營。當這樣的路徑不唯一時,要求選擇可以沿途解放最多城鎮的路徑。若這樣的路徑也不唯一,則選擇可以有效殺傷最多敵軍的路徑。

輸入格式:

輸入第一行給出2個正整數n(2 <= n <= 200,城鎮總數)和k(城鎮間道路條數),以及己方大本營和敵方大本營的代號。隨後n-1行,每行給出除了己方大本營外的乙個城鎮的代號和駐守的敵軍數量,其間以空格分隔。再後面有k行,每行按格式「城鎮1 城鎮2 距離」給出兩個城鎮之間道路的長度。這裡設每個城鎮(包括雙方大本營)的代號是由3個大寫英文本母組成的字串。

輸出格式:

按照題目要求找到最合適的進攻路徑(題目保證速度最快、解放最多、殺傷最強的路徑是唯一的),並在第一行按照格式「己方大本營->城鎮1->...->敵方大本營」輸出。第二行順序輸出最快進攻路徑的條數、最短進攻距離、殲敵總數,其間以1個空格分隔,行首尾不得有多餘空格。

輸入樣例:

10 12 pat dby

dby 100

pta 20

pds 90

pms 40

tap 50

atp 200

lnn 80

lao 30

lon 70

pat pta 10

pat pms 10

pat atp 20

pat lnn 10

lnn lao 10

lao lon 10

lon dby 10

pms tap 10

tap dby 10

dby pds 10

pds pta 10

dby atp 10

輸出樣例:
pat->pta->pds->dby

3 30 210

就乙個簡單的dfs+記錄一下路徑就可以過了(沒優化)。
#include #include #include #include #include #include #include #include #include #include using namespace std;

const int inf = 0x3f3f3f3f;

const int max = 11000;

typedef long long int ll;

int ma[210][210], num[210], a[210], b[210];//ma存圖,num記錄城市軍隊數量,a臨時陣列路徑,b更新的路徑

int vis[210], mindep, maxsum, n, e, j;//mindep最短路的長度,maxsum最大殺敵數

int sumdep, sumcunt;//最短路徑的條數,最大解放城市數

void dfs(int k, int dep, int cunt,int sum, int j)//k下乙個城市,dep走了多少路,cunt解放了多少城市,sum殺了多少敵軍,j同cunt

}else if(dep == mindep)

}else if(sumcunt == cunt)}}

}}

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

}}int main()

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

vis[0] = 1;

mindep = inf;

maxsum = 0;

sumcunt = 0;

sumdep = 0;

a[0] = 0;

dfs(0, 0, 0, 0, 1);

for(i = 0; i < sumcunt; i++)

printf("%s\n", en);

cout<

pat L3 011 直搗黃龍 dij 最短路)

時間限制 150 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 本題是一部戰爭大片 你需要從己方大本營出發,一路攻城略地殺到敵方大本營。首先時間就是生命,所以你必須選擇合適的路徑,以最快的速度占領敵方大本營。當這樣的路徑不唯一時,要求選擇可以沿途...

L3 011 直搗黃龍

本題是一部戰爭大片 你需要從己方大本營出發,一路攻城略地殺到敵方大本營。首先時間就是生命,所以你必須選擇合適的路徑,以最快的速度占領敵方大本營。當這樣的路徑不唯一時,要求選擇可以沿途解放最多城鎮的路徑。若這樣的路徑也不唯一,則選擇可以有效殺傷最多敵軍的路徑。輸入格式 輸入第一行給出2個正整數n 2 ...

L3 011 直搗黃龍 最短路

l3 011 直搗黃龍 30 分 本題是一部戰爭大片 你需要從己方大本營出發,一路攻城略地殺到敵方大本營。首先時間就是生命,所以你必須選擇合適的路徑,以最快的速度占領敵方大本營。當這樣的路徑不唯一時,要求選擇可以沿途解放最多城鎮的路徑。若這樣的路徑也不唯一,則選擇可以有效殺傷最多敵軍的路徑。輸入第一...