【网络流】——P2764 最小路径覆盖问题
一个最小路径覆盖的模板题。 Go: 洛谷 最小路径覆盖=顶点数-二分图最大匹配 因此我们将点复制一份,按照题目给的数据在两端连边,长度为1。 建立一个super源&汇,源向左边的点连边,右边的点向汇连边,长度为1。 求解路径: 我们在邻接表中存下每条边的起始点,对于一条流为0的边,表示它是最小路径中的一条,那么用冰茶姬将他们连起来,最后访问单独集合中的路径即可。 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 6e5+10,inf = 1e9; 4 int n, m, S, T, ans, d[N],head[N],maxflow,vis[N],f[N]; 5 int tot=-1; 6 struct edge{ 7 int w; 8 int next; 9 int to; 10 int from; 11 }e[N]; 12 int getf(int x){ 13 return f[x]==x?f[x]:f[x]=getf(f[x]); 14 } 15 inline void addedge(int x, int y, int z) { 16 e[++tot].to=y; 17 e[tot].next=head[x]; 18 e[tot].w=z; 19 e[tot].from=x; 20 head