洛谷 P2770 航空路線問題

2021-07-30 21:20:56 字數 2044 閱讀 8575

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

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

(2)除起點城市外,任何城市只能訪問 1 次。

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

輸入格式:

第 1 行有 2 個正整數 n 和 v,n 表示城市數,n<100,v 表示直飛航線數。接下來的 n 行中每一行是乙個城市名,可乘飛機訪問這些城市。城市名出現的順序是從西向東。也就是說,設 i,j 是城市表列中城市出現的順序,當 i>j 時,表示城市 i 在城市 j 的東邊,而且不會有 2 個城市在同一條經線上。城市名是乙個長度不超過15 的字串,串中的字元可以是字母或阿拉伯數字。例如,agr34 或 bel4。再接下來的 v 行中,每行有 2 個城市名,中間用空格隔開,如 city1 city2 表示 city1到 city2 有一條直通航線,從 city2 到 city1 也有一條直通航線。

輸出格式:

件第 1 行是旅行路線中所訪問的城市總數 m。接下來的 m+1 行是旅行路線的城市名,每行寫 1 個城市名。首先是出發城市名,然後按訪問順序列出其它城市名。注意,最後 1 行(終點城市)的城市名必然是出發城市名。如果問題無解,則輸出「no solution!」。

輸入樣例#1:

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

輸出樣例#1:

7

vancouver

edmonton

montreal

halifax

toronto

winnipeg

calgary

vancouver

感謝 @zhouyonglong 提供spj

辣雞題目,調了一天,qwq。

建圖:首先,將原問題轉換為從1到n找兩條不經過相同點的最長路徑。

由於次數限制,想到拆點。

對於每一條原圖中的邊,變成(i+n,j)的有向邊,最大流即為路徑條數。

最多經過的城市數就是跑費用流的最大費用。

至於記錄路徑,可以dfs搜尋。

注意不能在費用流中記錄,因為有玄學退流操作。

還有不能在原圖中的邊連容量為inf的邊,(不明原因)。

#include#include#include#include#includeusing namespace std;

const int n=105;

const int inf=1e9+7;

int n,m,cnt=1,s,t,sum,ans,res[2][n],dis[2*n],hd[2*n],pre[2*n];

bool inq[2*n],vis[2*n],***;

char ct[n][21];

queueq;

mapmp;

struct edge

v[2*n*n];

void addedge(int x,int y,int z,int w)

void addedges(int x,int y,int z,int w)

bool spfa()

return 0;

}

洛谷P2770 航空路線問題(費用流)

傳送門 完了這題好厲害 字串什麼的好麻煩 要求從 1 到 n 的路徑,不重複,經過邊數最多 每乙個點拆成兩個,a i,b i 然後 a i 到 b i 連容量為 1 費用為 1 的邊,保證每個點只被選一次 然後 1 和 n 的話要容量為 2 然後有連邊的話,b i 向 a j 連邊,容量 1 費用 ...

洛谷P2770 航空路線問題 最大費用最大流

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

P2770 航空路線問題(最大費用最大流)

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