题干:

题目描述

小B有n个下属,现小B要带着一些下属让别人拍照。

有m个人,每个人都愿意付给小B一定钱让n个人中的一些人进行合影。如果这一些人没带齐那么就不能拍照,小B也不会得到钱。

注意:带下属不是白带的!!!对于每个下属,如果他带了那么小B需要给他一些钱,保证当他拍照时配合。

请问,小B的净收益最多是多少。

输入输出格式

输入格式:

第1行有2个正整数m和n(0<m,n<=100)。接下来的m行,每行是一个要求拍照的人的有关数据。第一个数是他同意支付该合影的费用;接着是该合影需要的若干下属的编号,以一个0作为行的结束标记。最后一行的n个数是带每个下属的费用。

输出格式:

一个数,表示最大收益。小B可以一个人也不带。

输入输出样例

输入样例#1: 复制

2 3
10 1 2 0
25 2 3 0
5 6 7

输出样例#1: 复制

17

说明

对于10%的数据每个人都要求让全部n个人合影

对于30%的数据n<=15 m<=15

另有10%的数据答案为0

对于50%的数据n<=40 m<=40

另有10%的数据每个人只愿意拍一个人

对于100%的数据m,n<=100

解题报告:

最大权闭合图裸题。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define F first
#define S second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 5e3 + 5;
int n,m;
int tot;
const ll INF = 0x3f3f3f3f3f3f3f3f;
struct Edge {int to,ne;ll w;
} e[MAX*20];
int head[MAX];
int st,ed;
ll a[MAX],dis[MAX],q[MAX];//一共多少个点跑bfs,dis数组和q数组就开多大。
void add(int u,int v,ll w) {e[++tot].to=v;e[tot].w=w;e[tot].ne=head[u];head[u]=tot;
}
bool bfs(int st,int ed) {memset(dis,-1,sizeof(dis));int front=0,tail=0;q[tail++]=st;dis[st]=0;while(front<tail) {int cur = q[front];if(cur == ed) return 1;front++;for(int i = head[cur]; i!=-1; i = e[i].ne) {if(e[i].w&&dis[e[i].to]<0) {q[tail++]=e[i].to;dis[e[i].to]=dis[cur]+1;}}}if(dis[ed]==-1) return 0;return 1;
}
ll dfs(int cur,ll limit) {//limit为源点到这个点的路径上的最小边权 if(limit==0||cur==ed) return limit;ll w,flow=0;for(int i = head[cur]; i!=-1; i = e[i].ne) {       if(e[i].w&&dis[e[i].to]==dis[cur]+1) {w=dfs(e[i].to,min(limit,e[i].w));e[i].w-=w;e[i^1].w+=w;flow+=w;limit-=w;if(limit==0) break;}}if(!flow) dis[cur]=-1;return flow;
}
ll dinic() {ll ans = 0;while(bfs(st,ed)) ans+=dfs(st,INF);return ans;
}
int ans2;
bool vis[MAX];
void dfs2(int cur) {if(cur == ed) return;vis[cur] = 1;ans2++;for(int i = head[cur]; ~i; i = e[i].ne) {int v = e[i].to;if(e[i].w == 0 || vis[v]) continue;dfs2(v);}
}
int main()
{cin>>m>>n;st=0;ed=n+m+1;tot=1;ll sum = 0;for(int i = 0; i<=n+m+1; i++) head[i] = -1;for(int x,y,i = 1; i<=m; i++) {scanf("%d",&x);sum += x;add(st,i,x);add(i,st,0);while(scanf("%d",&y) && y) {add(i,m+y,INF);add(m+y,i,0);}}for(int x,i = 1; i<=n; i++) {scanf("%d",&x);add(m+i,ed,x);add(ed,m+i,0);}ll ans = sum - dinic();cout << ans << endl;return 0;
}

【洛谷 - P3410】拍照(最大权闭合图,网络流最小割)相关推荐

  1. luogu P3410 拍照(最大权闭合图转最小割)

    luogu P3410 拍照 最大权闭合图转最小割 要得到最大收益,我们可以用总可能收益减去最小花费,也就是最小割. #include<cstdio> #include<cstrin ...

  2. 【网络流24题】B、太空飞行计划问题(最大权闭合图转最小割、最小割方案输出)

    整理的算法模板合集: ACM模板 B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] P2762 太空飞行计划问题 [问题分析] 最大权闭合图问题,可以转化成最小割问题, ...

  3. noi 2006 最大收益 最大权闭合图转最小割转最大流

    题意:一个公司有n个可以建造通讯战的地方,建造成本分别为pi,然后第i个公司会选择使用通讯站ai与bi,使用费用是ci,然后问这个通讯公司怎么建站能够获利最大.(净获利=总收益-总成本): 网上看到一 ...

  4. 【BZOJ】1497: [NOI2006]最大获利 最大权闭合子图或最小割

    [题意]给定n个点,点权为pi.m条边,边权为ci.选择一个点集的收益是在[点集中的边权和]-[点集点权和],求最大获利.n<=5000,m<=50000,0<=ci,pi<= ...

  5. 最大权闭合子图(最小割模型)

    1,定义: 1,最大权闭合子图是最小割的一个模型.即每一个子图中的每一个点,其出边的点也全应该在这个子图中.而所有子图中,其点的权值和最大就是最大权闭合子图. 2,构建该图,我们把所有正权值点与源点s ...

  6. 51nod1551-集合交易【hall定理,最大权闭合图,网络流】

    正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1551 题目大意 nnn个集合,nnn个物品,每个集合有一些物品,一个价钱 ...

  7. 51nod1325-两棵树的问题【最大权闭合图,网络流】

    正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1325 题目大意 两棵树.要求选出一组权值和最大的点使得这两个点集在两棵树 ...

  8. 【洛谷1361】 小M的作物(最小割)

    传送门 洛谷 Solution 这是一个比较实用的套路,很多题目都有用,而且这个套路难以口胡出来. 考虑把每一个附加贡献重新建一个点,然后向必需的点连边,流量为val. 然后直接种植的从源点向这个点连 ...

  9. 【洛谷P3410】拍照题解(最大权闭合子图总结)

    题目描述 小B有n个下属,现小B要带着一些下属让别人拍照. 有m个人,每个人都愿意付给小B一定钱让n个人中的一些人进行合影.如果这一些人没带齐那么就不能拍照,小B也不会得到钱. 注意:带下属不是白带的 ...

  10. 图论 —— 网络流 —— 最小割 —— 最大权闭合子图

    [概述] 给出一个有向图,每一个点都有一个权值,现在要选择一个权值和最大的子图,使得每个点的后继都在子图中,这个子图就称为最大权闭合子图. 如上图,能选的子图有:Ø.{1,2,3,4,5,6}.{3, ...

最新文章

  1. 【AJAX】Ajax学习总结
  2. 51nod 1513-3的幂的和(费马小定理+快速幂)
  3. 专家票选! 2020 年度 10 篇人工智能经典论文(6-10)
  4. java下载文件跳转页面_java servlet笔记:设置编码集、文件下载和两种服务器跳转-java下载文件...
  5. Linux中常用的查找文件的命令
  6. 看完这篇,你就知道Python生成器是什么
  7. 实战|QUIC协议助力腾讯业务提速30%
  8. Android中shape中的属性大全
  9. (王道408考研操作系统)第二章进程管理-第二节4:调度算法详解2(RR、HPF和MFQ)
  10. 受 SQLite 多年青睐,C 语言到底好在哪儿? 1
  11. 安装SQL2005示例数据库
  12. 自动化测试工具-Airtest
  13. android gps测速代码,【GPS测速仪】GPS测速仪 GPS speedometer 1.6.0下载_安卓(android)软件下载-魅族溜...
  14. AE新知识-10月30日
  15. java big5_BIG5编码表
  16. 程序员史诗级必读书单吐血整理四个维度系列80+本书(珍藏版)
  17. java meta-inf作用_java - META-INF的目的是什么?
  18. java实现猴子排序_Java排序 - 不实用的几个排序算法 -- 睡眠排序、猴子排序、面条排序、珠排序...
  19. [Erlang危机](3.2)限制输入
  20. 已写完的二十本最经典原创小说巨作!你都看过吗?

热门文章

  1. mysql定时增量备份_Mysql日常自动备份和增量备份脚本
  2. 收藏夹库计算机网络的关系,云南省计算机一级考试题库 计算机网络及基础.pdf...
  3. unity hub服务器无响应_累积更新KB4541335反馈称无法安装 出现无响应情况
  4. 1285B. Just Eat It
  5. 计算机专业的第二批本科大学,第二批本科院校
  6. java web scala_spring boot+scala编写web接口
  7. 16位计算机cpu电路图,简单16位CPU设计.doc
  8. 家用电脑配置_游戏搬砖必看教程,游戏工作室电脑如何配置
  9. 计算机如何用vb文本加密,信息加密与隐藏工具的设计与实现VB231
  10. 将结构体写入文件_将COCO检测结果写入json文件