题目大意:

https://www.luogu.org/problemnew/show/P3410

题解 https://www.cnblogs.com/2020pengxiyue/p/9463055.html

源点s到各任务的边权为利益

各任务需要的职工到汇点t的边权为花费

当某一任务的 利益>=花费 时,求得的最大流为完成该任务需要的花费(1)

当某一任务的 利益<花费 时,求得的最大流为完成该任务所得的利益(2)

用总的利益减去最大流得到的

对(1)来说得到的是该任务的纯利

对(2)来说得到的是0 即不做该任务

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define LL long long
using namespace std; const int N=; int n,m,w[N],p[N];
vector <int> vec[N]; struct MAXFLOW {
struct NODE { int to,cap,rev; };
vector <NODE> G[N];
int lev[N], iter[N];
int s,t;
void addE(int u,int v,int cap) {
G[u].push_back((NODE){v,cap,G[v].size()});
G[v].push_back((NODE){u,,G[u].size()-});
}
void BFS(int s) {
memset(lev,-,sizeof(lev));
queue<int>q;
q.push(s); lev[s]=;
while(!q.empty()) {
int u=q.front(); q.pop();
for(int i=;i<G[u].size();i++) {
NODE &v=G[u][i];
if(v.cap> && lev[v.to]<)
lev[v.to]=lev[u]+, q.push(v.to);
}
}
}
int DFS(int u,int t,int f) {
if(u==t) return f;
for(int &i=iter[u];i<G[u].size();i++) {
NODE &v=G[u][i];
if(v.cap> && lev[u]<lev[v.to]) {
int d=DFS(v.to,t,min(f,v.cap));
if(d>) {
v.cap-=d;
G[v.to][v.rev].cap+=d;
return d;
}
}
}
return ;
}
int maxFlow() {
int flow=;
while() {
BFS(s);
if(lev[t]<) return flow;
memset(iter,,sizeof(iter));
while() {
int f=DFS(s,t,INF);
if(f>) flow+=f;
else break;
}
}
}
}F; int main()
{
while(~scanf("%d%d",&n,&m)) {
int sum=, tmp;
for(int i=;i<=n;i++) {
scanf("%d",&p[i]);
sum+=p[i]; vec[i].clear();
while(~scanf("%d",&tmp)&&tmp)
vec[i].push_back(tmp);
}
for(int i=;i<=m;i++) scanf("%d",&w[i]);
int node=n+m;
F.s=+node, F.t=+node;
for(int i=;i<=n;i++) {
F.addE(F.s,i,p[i]);
for(int j=;j<vec[i].size();j++)
F.addE(i,vec[i][j]+n,INF);
}
for(int i=n+;i<=n+m;i++) F.addE(i,F.t,w[i-n]);
printf("%d\n",sum-F.maxFlow());
} return ;
}

P3410 /// 最大流最小割的更多相关文章

  1. hiho 第116周,最大流最小割定理,求最小割集S,T

    小Hi:在上一周的Hiho一下中我们初步讲解了网络流的概念以及常规解法,小Ho你还记得内容么? 小Ho:我记得!网络流就是给定了一张图G=(V,E),以及源点s和汇点t.每一条边e(u,v)具有容量c ...

  2. hihocoder 网络流二·最大流最小割定理

    网络流二·最大流最小割定理 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi:在上一周的Hiho一下中我们初步讲解了网络流的概念以及常规解法,小Ho你还记得内容么? ...

  3. [HihoCoder1378]网络流二·最大流最小割定理

    思路: 根据最大流最小割定理可得最大流与最小割相等,所以可以先跑一遍EdmondsKarp算法.接下来要求的是经过最小割切割后的图中$S$所属的点集.本来的思路是用并查集处理所有前向边构成的残量网络, ...

  4. HDU 1569 方格取数(2)(最大流最小割の最大权独立集)

    Description 给你一个m*n的格子的棋盘,每个格子里面有一个非负数. 从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取数所在的2个格子不能相邻,并且取出的数的和最大.   ...

  5. FZU 1844 Earthquake Damage(最大流最小割)

    Problem Description Open Source Tools help earthquake researchers stay a step ahead. Many geological ...

  6. 【codevs1907】方格取数3(最大流最小割定理)

    网址:http://codevs.cn/problem/1907/ 题意:在一个矩阵里选不相邻的若干个数,使这些数的和最大. 我们可以把它看成一个最小割,答案就是矩阵中的所有数-最小割.先把矩阵按国际 ...

  7. 紫书 例题 11-12 UVa 1515 (最大流最小割)

    这道题要分隔草和洞, 然后刘汝佳就想到了"割"(不知道他怎么想的, 反正我没想到) 然后就按照这个思路走, 网络流建模然后求最大流最小割. 分成两部分, S和草连, 洞和T连 外围 ...

  8. HDU-4289-Control(最大流最小割,拆点)

    链接: https://vjudge.net/problem/HDU-4289 题意: You, the head of Department of Security, recently receiv ...

  9. 牛客暑期第六场G /// 树形DP 最大流最小割定理

    题目大意: 输入t,t个测试用例 每个测试用例输入n 接下来n行 输入u,v,w,树的无向边u点到v点权重为w 求任意两点间的最大流的总和 1.最大流最小割定理 即最大流等于最小割 2.无向树上的任意 ...

随机推荐

  1. h5唤醒手机拨打电话

    jquery  :  $("#a").attr("href","tel:110");

  2. HTML5网页如何让所有的浏览器都能识别语义元素标签样式

    浏览器对语义元素的支持情况 如今HTML5愈来愈引发大家的关注了,但目前支持HTML5的浏览器还不是主流,特别是国内用户近50%以上仍旧使用IE6,由于支持HTML5的IE9不支持Xp系统安装,这样未 ...

  3. CTU OPEN 2017 Ice cream samples /// 尺取法

    题目大意: 给定n k 接下来n行 给定n个摊位的冰淇淋信息 首先给一个t 表示这个摊位有t个冰淇淋 接下来t个数表示对应冰淇淋的品种 走到连续的几个摊位 会买下走过的摊位的所有的冰淇淋 求 要买下所 ...

  4. WPF非UI线程访问网络资源造成页面假死现象

    公司内部一个项目是用WPF作为GUI 访问web接口的形式获取数据, 但是由于数据量比较大,也没做分页,于是就需要一个loading的控件,网上查了很多资料但都比较浅.这里完成需求后,总结一下. 首先 ...

  5. Hibernate4教程一:入门介绍

    第一部分:Hibernate入门 Hibernate是什么     Hibernate是一个轻量级的ORM框架     ORM原理(Object Relational Mapping)     ORM ...

  6. C语言交换两个数的值

    #include<stdio.h> int main() { //交换两个数的值 // 方法一 可读性最好 ; ; int temp ; temp = a; a = b; b = temp ...

  7. sync - 清空文件系统缓冲区

    总览 (SYNOPSIS) sync [OPTION] 描述 (DESCRIPTION) 强迫把更改的块写入磁盘, 并更新超级块. --help 显示帮助然后终止. --version 显示版本信息然 ...

  8. 关于prototype与constructor的几点理解

    首先要明确一点,js中的prototype是每个函数创建时(并非执行时,而是函数存在于堆区后)自动创建一个默认对象,这一对象中可以动态的添加属性 在new对象后,可以通过“对象.属性名”的方式直接调用 ...

  9. centos6.5大于2T容量硬盘分区、格式化、挂载!

    一.  超过2T容量硬盘使用parted创建分区 1.fdisk l(查看需要分区的硬盘盘符如:sda) 2.parted /dev/sda 3.rm 1 4.mklabel gpt(超过2T磁盘格式 ...

  10. 2019计蒜之道初赛第3场-阿里巴巴协助征战SARS 费马小定理降幂

    题目链接:https://nanti.jisuanke.com/t/38352 发现规律之后就是算ans=2^(n-1)+4^(n-1).但是注意到n十分大是一个长度为1e5的数字.要想办法降幂. 我 ...