網路流24題
洛谷題單:網路流24題
第一題:飛行員配對問題
二分圖模板題,匈牙利可以過,並且匈牙利演算法可以記錄匹配的資訊
1 #include 2 #include 3 #include 4 #include 5view code#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()
第二題:太空飛行計畫問題
最小割的應用,最大權閉合子圖模板題,源點建正權,匯點建負權
最大權閉合子圖的權值和=max=正點權和−min
=正點權和−最小割
1 #include 2 #include 3 #include 4 #include 5 #include 6view code#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 }
第三題:最小路徑覆蓋問題
最小路徑覆蓋,可看**注釋,拆點轉化為二分圖最大匹配
1view code//選出的路徑最少 <=> 終點最少 <=> 二分圖左側的未匹配點最少 <=> 二分圖匹配數最大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 }
網路流 24 題
1 搭配飛行員 題意 n個飛行員,其中有m名飛行員是正駕駛員。飛機每架有兩個駕駛員,需乙個正駕駛員和乙個副駕駛員。由於種種原因,例如相互配合的問題,有些駕駛員不能在同一架飛機上飛行,問如何搭配駕駛員才能使出航的飛機最多。思路 裸二分圖匹配 最大流 題 版本一 網路流做法 引入源點s 0以及匯點t n...
網路流24題
學會網路流演算法後,我們要做的就是把問題轉化成網路流問題。求二分圖最大匹配。網路流建模要找到問題的關鍵特點,用連邊,流量 以及費用 把原問題轉化成網路流問題,包括最大流,最小割,費用流。二分圖最大匹配的特點是每個點最多屬於一條匹配邊。這相當於是說,每個點只能流過一次。要求的是最大匹配,可以得出建模為...
網路流24題
經典問題,做了一部分 太水的就不記錄了 最大流是對於一種完整的匹配的處理,一條路乙個貢獻。要求匹配盡可能多。費用流是對於乙個路徑的最值的處理,每條邊自己的費用。再匹配最多前提下,匹配的費用達到最值。難點就是對於條件狀態的設計 網路流24題 餐巾計畫問題 費用流建模 考慮每天一定有ri條髒毛巾,所以髒...