luogu2770 航空路線問題

2022-05-08 01:24:06 字數 1115 閱讀 3472

前置技能:hdu3376 matrix again

所以看到這個題,我們也會想著用最大費用最大流解決,因為從起點飛到終點再飛回來,就等於從起點飛兩次到終點且這兩次飛行除了起點終點之外沒有訪問超過一次的點。

考慮拆點限流,除起點終點以外的點容量是1(花費代表邊權),起點終點容量是2。

輸出方案的話,我是dfs兩遍找出兩條起點到終點的路徑,然後分別正著倒著輸出。

#include #include #include #include #include #include using namespace std;

int n, m, hea[205], cnt, uu, vv, mincost, ss, tt, dis[205], pre[205];

int opt[2][105], tot[2];

const int oo=0x3f3f3f3f;

bool vis[205];

queued;

string qaq, qwq, ovo[105];

mapa;

struct edgeedge[40005];

void add_edge(int fro, int too, int val, int cst)

void addedge(int fro, int too, int val, int cst)

bool spfa()

}} }

return dis[tt]!=oo;

}void mcmf() }}

void dfs(int x, int o) }}

int main()

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

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

addedge(i, i+n, 1, -1);

ss = 0; tt = 2 * n + 1;

addedge(ss, 1, 2, 0);

addedge(2*n, tt, 2, 0);

addedge(1, 1+n, 1, -1);

addedge(n, n+n, 1, -1);

mcmf();

if(mincost==0)

luogu2770 航空路線問題 網路流

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

luogu P2770 航空路線問題

傳送門 題意是選出兩條從左往右的中間點不能重複選的路徑,並使得經過的所有點數最大 可以考慮最大費用最大流,即把所有點拆點,入點向出點中間連容量為1,費用為1的邊,然後按照題目中的關係把左邊點的出點和右邊點的入點連容量為1,費用為0的邊 起點和終點的中間邊容量為2 源點到起點,終點到匯點連容量為2,費...

洛谷 P2770 航空路線問題

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