博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
太空飞行计划问题
阅读量:7053 次
发布时间:2019-06-28

本文共 2124 字,大约阅读时间需要 7 分钟。

最大权闭合子图:等于正边权 - 最大流(最小割)

我的理解
最大收益就是要求最小损失,那么用最小割模型(别问我是怎么想到的)
S向实验连边,表示割掉这条边,把实验割给T会有损失
T向配置连边,表示割掉这条边,把配置割给S会有损失
跑出的最小割(最大流)就是损失

# include 
# include
# include
# include
# define ll long long# define RG register# define IL inline# define mem(a, b) memset(a, b, sizeof(a))# define Max(a, b) (((a) > (b)) ? (a) : (b))# define Min(a, b) (((a) < (b)) ? (a) : (b))using namespace std;const int MAXN = 1001, INF = 2147483647;int n, m, map[MAXN][MAXN], ans, level[MAXN], Q[MAXN * MAXN], tot, vis[MAXN];char s[MAXN];IL bool Bfs(RG int S, RG int T){ mem(level, 0); mem(vis, 0); RG int head = 0, tail = 0; level[S] = 1; Q[0] = S; while(head <= tail){ RG int u = Q[head++]; if(u == T) return 1; for(RG int v = 1; v <= T; v++) if(!level[v] && map[u][v]){ level[v] = level[u] + 1; vis[v] = 1; Q[++tail] = v; } } return 0;}IL int Dfs(RG int u, RG int T, RG int maxf){ if(u == T) return maxf; RG int ret = 0; for(RG int v = 1; v <= T; v++) if(level[v] == level[u] + 1 && map[u][v]){ RG int f = Dfs(v, T, Min(maxf - ret, map[u][v])); map[u][v] -= f; map[v][u] += f; ret += f; if(ret == maxf) break; } return ret;}int main(){ scanf("%d%d", &m, &n); for(RG int i = 1; i <= m; i++){ RG int f, v, j = 0, x; scanf("%d", &f); map[0][i] = f; tot += f; mem(s, 0); cin.getline(s, 10000); while(sscanf(s + j, "%d", &x)==1){ if(!x) j++; else map[i][m + x] = INF; while(x) x /= 10, j++; j++; } } for(RG int i = 1; i <= n; i++) scanf("%d", &map[m + i][m + n + 1]); while(Bfs(0, m + n + 1)) ans += Dfs(0, m + n + 1, INF); for(RG int i = 1; i <= m; i++) if(vis[i]) printf("%d ", i); printf("\n"); for(RG int i = 1; i <= n; i++) if(vis[i + m]) printf("%d ", i); printf("\n%d\n", tot - ans); return 0;}

转载于:https://www.cnblogs.com/cjoieryl/p/8206331.html

你可能感兴趣的文章
实验三 有限自动机的构造与识别
查看>>
python的学习笔记之——time模块常用内置函数
查看>>
计算机是如何工作的
查看>>
【c++】必须在类初始化列表中初始化的几种情况
查看>>
阿拉伯数字1与英语字母l造成的代码bug
查看>>
深度学习常见的专业术语
查看>>
2018-2019-2 20165334《网络对抗技术》Exp2 后门原理与实践
查看>>
vue双向数据绑定最最最最最简单直观的例子
查看>>
HTML提交方式post和get区别(实验)
查看>>
Java 11.do语句
查看>>
学习理论之感知器与最大间隔分类器
查看>>
我们建了一个 Golang 硬核技术交流群(内含视频福利)
查看>>
Be Nice!要善良
查看>>
二、ansible配置简要介绍
查看>>
解决docker容器中无ifconfig命令和ping命令问题
查看>>
CHAR、TCHAR、WCHAR_T之间的区别与问题
查看>>
sql小计合计
查看>>
安装Java
查看>>
Ubuntu Linux输入法fcitx方块乱码解决设置
查看>>
node递归批量重命名指定文件夹下的文件
查看>>