網路流 24 題 航空路線問題

2021-08-07 03:58:39 字數 2533 閱讀 9383

題目描述

給定一張航空圖,圖中頂點代表城市,邊代表兩個城市間的直通航線。現要求找出一條滿足下述限制條件的且途經城市最多的旅行路線。

從最西端城市出發,單向從西向東途經若干城市到達最東端城市,然後再單向從東向西飛回起點(可途經若干城市)。

除起點城市外,任何城市只能訪問一次。

對於給定的航空圖,試設計乙個演算法找出一條滿足要求的最佳航空旅行路線。

輸入格式

第一行有兩個正整數 nn

n 和 vv

v,nn

n 表示城市數,vv

v 表示直飛航線數。

接下來的 nn

n 行中每一行是乙個城市名,可乘飛機訪問這些城市。城市名出現的順序是從西向東。也就是說,設 i,ji,ji,

j 是城市表列中城市出現的位置次序,當 i>ji>j

i>

j 時,表示 城市 ii

i在城市 jj

j 的東邊,而且不會有兩個城市在同一條經線上。城市名是乙個長度不超過 151515

的字串,串中的字元可以是大小寫字母或阿拉伯數字。例如,agr34\textag

r34 或 bel4\textbe

l4。再接下來的 vv

v 行中,每行有兩個城市名,中間用空格隔開,如 city1 city2\textci

ty1c

ity2

表示 city1\textci

ty1 到 city2\textci

ty2 有一條直通航線,從 city2\textci

ty2 到 city1\textci

ty1 也有一條直通航線。

輸出格式

輸出最佳航空旅行路線。

第一行是旅行路線中所訪問的城市總數 mmm。

接下來的 m+1m+1m+

1 行是旅行路線的城市名,每行乙個。首先是出發城市名,然後按訪問順序列出其它城市名。注意,最後一行(終點城市)的城市名必然是出發城市名。如果有多組最優解,輸出任意一組均可;如果問題無解,則輸出no solution!

樣例樣例輸入

8 9

vancouver

yellowknife

edmonton

calgary

winnipeg

toronto

montreal

halifax

vancouver edmonton

vancouver calgary

calgary winnipeg

winnipeg toronto

toronto halifax

montreal halifax

edmonton montreal

edmonton yellowknife

edmonton calgary

樣例輸出

7

vancouver

edmonton

montreal

halifax

toronto

winnipeg

calgary

vancouver

最小費用最大流,重要的是路徑的輸出。
#include#include#include#include#includeusing namespace std;

#define swap(a,b)

const int maxm = 10005;

const int inf = 1e9 + 7;

mapp;

struct node

edge[maxm];

int head[maxm], vis[maxm], pre[maxm], dis[maxm];

int cnt, n, m, s, t, ans = 0;

char str[105][25], ch[25], sh[25];

void init()

void add(int u, int v, int w, int cost)

int bfs()

} }if (dis[t] == inf) return 0;

return 1;

}int mcmf()

return flow;

}void prin(int u, int n) }}

int main()

add(s, 1, 2, 0);

add(n * 2, t, 2, 0);

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

if (mcmf() != 2)

printf("%s", str[1]);

prin(1, n);

puts(str[1]);

return 0;

}

網路流24題 航空路線問題

題目描述 給定一張航空圖,圖中頂點代表城市,邊代表 2 城市間的直通航線。現要求找出一條滿足下述限制條件的且途經城市最多的旅行路線。1 從最西端城市出發,單向從西向東途經若干城市到達最東端城市,然後再單向從東向西飛回起點 可途經若干城市 2 除起點城市外,任何城市只能訪問 1 次。從東到西到達乙個點...

網路流24題 航空路線問題

乙個點只能經過一次 拆點,連流量為1,費用為0的邊。最多能經過多少城市 最大費用流。兩個點之間有一條路線 從u 連向v。這種題一般都這樣建邊 需要注意的一點是 第二個測試點它的最佳方案是從1到n然後再到1 所以不能對於每條可行的線路的容量設定成1,這樣的話對於這種情況就無法回來了qwq ifndef...

網路流24題 航空路線問題

時空限制1000ms 128mb 給定一張航空圖,圖中頂點代表城市,邊代表 2 城市間的直通航線。現要求找出一條滿足下述限制條件的且途經城市最多的旅行路線。1 從最西端城市出發,單向從西向東途經若干城市到達最東端城市,然後再單向從東向西飛回起點 可途經若干城市 2 除起點城市外,任何城市只能訪問 1...