網路流24題

2022-04-30 03:24:08 字數 3006 閱讀 5987

網路流24題

洛谷題單:網路流24題

第一題:飛行員配對問題

二分圖模板題,匈牙利可以過,並且匈牙利演算法可以記錄匹配的資訊

1 #include 2 #include 3 #include 4 #include 5

#define n 100010

6using

namespace

std;

7int

cnt, n, m, head[n], nxt[n], to[n], p[n];

8bool

vis[n];

9 inline int

read()

17while (c >= '

0' && c <= '9'

)18 x = x * 10 + c - '

0', c =getchar();

19return x *y;20}

21void add(int x, int

y) 26

bool match(int

u) 37}38

return

false;39

}40intpipei()

47return

ans;48}

49int

main()

view code

第二題:太空飛行計畫問題

最小割的應用,最大權閉合子圖模板題,源點建正權,匯點建負權

最大權閉合子圖的權值和=max=正點權和−min

=正點權和−最小割

1 #include 2 #include 3 #include 4 #include 5 #include 6

#define n 10010

7using

namespace

std;

8 vectorg[n];

9int

cnt,n,m,s,t,head[n],nxt[n],to[n],d[n],cur[n],w[n],f[n];

10const

int inf = 0x3f3f3f3f;11

void add(int x, int y, int

z)12

18bool bfs(int s, int

t)1935}

36}37return d[t] != -1;38

}39int dfs(int s, int

flow)

4058}59

}60return

ans;61}

62int dinic(int s, int

t)63

70return

ans;71}

72int

main()

7390}91

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

9297 sum -=dinic(s,t);

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

99if(d[i+n] != -1

)100 printf("

%d "

,i);

101 puts(""

);102

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

103if(d[i] != -1

)104 printf("

%d "

,i);

105 puts(""

);106 printf("

%d\n

",sum);

107return0;

108 }

view code

第三題:最小路徑覆蓋問題

最小路徑覆蓋,可看**注釋,拆點轉化為二分圖最大匹配

1

//選出的路徑最少 <=> 終點最少 <=> 二分圖左側的未匹配點最少 <=> 二分圖匹配數最大2//

最少路徑= 最少終點 = 總點數-最大匹配數 = n-maxflow

3 #include 4 #include 5 #include 6 #include 7

#define n 18010

8using

namespace

std;

9int

cnt,n,m,head[n],nxt[n],to[n],p[n],p1[n];

10bool

vis[n];

11 inline int

read()

12 while(c >= '

0' && c <= '

9') x = x*10+c-'

0', c = getchar(); return x*y;14}

15void add(int x, int

y)16

21bool match(int

u)2234}

35return

false;36

}37intpipei()

3846

return

ans;47}

48int

main()

4959

int ans = n-pipei();

60for(int i = 0; i < ans; i++)

6171}72

while(p1[j] != 0)

73for(int k = 0; k < g.size(); k++)

74 printf("

%d "

,g[k]);

75 puts(""

);76

}77 printf("%d"

,ans);

78return0;

79 }

view code

網路流 24 題

1 搭配飛行員 題意 n個飛行員,其中有m名飛行員是正駕駛員。飛機每架有兩個駕駛員,需乙個正駕駛員和乙個副駕駛員。由於種種原因,例如相互配合的問題,有些駕駛員不能在同一架飛機上飛行,問如何搭配駕駛員才能使出航的飛機最多。思路 裸二分圖匹配 最大流 題 版本一 網路流做法 引入源點s 0以及匯點t n...

網路流24題

學會網路流演算法後,我們要做的就是把問題轉化成網路流問題。求二分圖最大匹配。網路流建模要找到問題的關鍵特點,用連邊,流量 以及費用 把原問題轉化成網路流問題,包括最大流,最小割,費用流。二分圖最大匹配的特點是每個點最多屬於一條匹配邊。這相當於是說,每個點只能流過一次。要求的是最大匹配,可以得出建模為...

網路流24題

經典問題,做了一部分 太水的就不記錄了 最大流是對於一種完整的匹配的處理,一條路乙個貢獻。要求匹配盡可能多。費用流是對於乙個路徑的最值的處理,每條邊自己的費用。再匹配最多前提下,匹配的費用達到最值。難點就是對於條件狀態的設計 網路流24題 餐巾計畫問題 費用流建模 考慮每天一定有ri條髒毛巾,所以髒...