题目描述

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

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

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

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

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#1:

  1. 2 3
  2. 10 1 2 0
  3. 25 2 3 0
  4. 5 6 7
输出样例#1:

  1. 17

说明

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

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

另有10%的数据答案为0

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

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

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

思路:

  裸网络流;

来,上代码:

  1. #include <queue>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <iostream>
  5. #include <algorithm>
  6.  
  7. #define maxn 205
  8. #define INF 0x7fffffff
  9.  
  10. using namespace std;
  11.  
  12. struct EdgeType {
  13. int v,f,e;
  14. };
  15. struct EdgeType edge[maxn*maxn*];
  16.  
  17. int n,m,ans,s,t=maxn-,head[maxn],deep[maxn],cnt=;
  18.  
  19. char Cget;
  20.  
  21. inline void in(int &now)
  22. {
  23. now=,Cget=getchar();
  24. while(Cget>''||Cget<'') Cget=getchar();
  25. while(Cget>=''&&Cget<='')
  26. {
  27. now=now*+Cget-'';
  28. Cget=getchar();
  29. }
  30. }
  31.  
  32. inline void edge_add(int u,int v,int f)
  33. {
  34. edge[++cnt].v=v,edge[cnt].f=f,edge[cnt].e=head[u],head[u]=cnt;
  35. edge[++cnt].v=u,edge[cnt].f=,edge[cnt].e=head[v],head[v]=cnt;
  36. }
  37.  
  38. bool bfs()
  39. {
  40. for(int i=s;i<=t;i++) deep[i]=-;
  41. queue<int>que;que.push(s),deep[s]=;
  42. while(!que.empty())
  43. {
  44. int now=que.front();que.pop();
  45. for(int i=head[now];i;i=edge[i].e)
  46. {
  47. if(edge[i].f>&&deep[edge[i].v]<)
  48. {
  49. deep[edge[i].v]=deep[now]+;
  50. if(edge[i].v==t) return true;
  51. que.push(edge[i].v);
  52. }
  53. }
  54. }
  55. return false;
  56. }
  57.  
  58. int flowing(int now,int flow)
  59. {
  60. if(now==t||flow<=) return flow;
  61. int oldflow=;
  62. for(int i=head[now];i;i=edge[i].e)
  63. {
  64. if(edge[i].f<=||deep[edge[i].v]!=deep[now]+) continue;
  65. int pos=flowing(edge[i].v,min(flow,edge[i].f));
  66. if(pos>)
  67. {
  68. flow-=pos;
  69. oldflow+=pos;
  70. edge[i].f-=pos;
  71. edge[i^].f+=pos;
  72. if(flow==) return oldflow;
  73. }
  74. }
  75. if(oldflow==) deep[now]=-;
  76. return oldflow;
  77. }
  78.  
  79. int main()
  80. {
  81. in(m),in(n);
  82. for(int i=;i<=m;i++)
  83. {
  84. int pos;
  85. in(pos),ans+=pos;
  86. edge_add(s,i,pos);
  87. in(pos);
  88. while(pos) edge_add(i,m+pos,INF),in(pos);
  89. }
  90. for(int i=;i<=n;i++)
  91. {
  92. int pos;in(pos);
  93. edge_add(i+m,t,pos);
  94. }
  95. while(bfs()) ans-=flowing(s,INF);
  96. printf("%d\n",ans);
  97. return ;
  98. }

AC日记——拍照 洛谷 P3410的更多相关文章

  1. AC日记——最大数 洛谷 P1198 [JSOI2008]

    题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度. 2. 插入操作 ...

  2. AC日记——中位数 洛谷 P1168

    题目描述 给出一个长度为N的非负整数序列A[i],对于所有1 ≤ k ≤ (N + 1) / 2,输出A[1], A[2], …, A[2k - 1]的中位数.[color=red]即[/color] ...

  3. AC日记——传染病控制 洛谷 P1041

    传染病控制 思路: 题目想问的是: 有一棵树: 对于除1外每个深度可以剪掉一棵子树: 问最后剩下多少节点: 题目意思一简单,这个题立马就变水了: 搜索就能ac: 数据有为链的情况,按深度为层次搜索的话 ...

  4. AC日记——忠诚 洛谷 P1816

    题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了 ...

  5. AC日记——独木桥 洛谷 p1007

    题目背景 战争已经进入到紧要时间.你是运输小队长,正在率领运输部队向前线运送物资.运输任务像做题一样的无聊.你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥下欣赏士兵们.士兵 ...

  6. AC日记——潜伏者 洛谷 P1071 (模拟)

    题目描述 R 国和 S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 S 国的 R 国间谍小 C 终于摸清了 S 国军用密码的编码规则: 1. S 国军方内部欲发送的原 ...

  7. AC日记——机器翻译 洛谷 P1540

    题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先 ...

  8. AC日记——统计和 洛谷 P2068

    统计和 思路: 水题: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 int n,m,tree ...

  9. AC日记——送花 洛谷 P2073

    送花 思路: 线段树: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 struct TreeN ...

随机推荐

  1. 用宝塔软件在linux上自动安装php环境

    1.确保是纯净系统 确保是干净的操作系统,没有安装过其它环境带的Apache/Nginx/php/MySQL,否则安装不上 2.sudo进行安装 yum install -y wget &&a ...

  2. 关于上传文件 非ajax提交 得到后台数据问题

    <form name="configForm" id="configForm" method="post" action=" ...

  3. Linux 常用命令(三)

    一.less --分页查看文件:方面查阅(编辑)大文件 说明:支持方向键盘和鼠标向上向下浏览 -N 显示行号 二.head --output the first  part of files 默认显示 ...

  4. How to setup multimedia on CentOS 7

    You will need to also install the EPEL repository as nux-dextop depends on this for some of its pack ...

  5. POJ:3160-Father Christmas flymouse

    Father Christmas flymouse Time Limit: 1000MS Memory Limit: 131072K Description After retirement as c ...

  6. 思维水题:UVa512-Spreadsheet Tracking

    Spreadsheet Tracking Data in spreadsheets are stored in cells, which are organized in rows (r) and c ...

  7. 求数组中两两相加等于20的组合(Python实现)

    题目 求数组中两两相加等于20的组合. 例:给定一个数组[1, 7, 17, 2, 6, 3, 14],这个数组中满足条件的有两对:17+3=20, 6+14=20. 解析 分为两个步骤: 先采用堆排 ...

  8. Splay的用法

    splay区间增减查询 #include<cstdio> #include<algorithm> using namespace std; ; const int INF = ...

  9. Django之include本质

    一. URL name详解 from django.conf.urls import url from django.contrib import admin from calc import vie ...

  10. 到底有没有必要兼容IE版本

    我就说两个字:"没有". 理由如下: 1.占资源空间,额外去写css hack去做页面兼容处理.(主要是增加css代码) PS:css hack 不是W3C的规范,css hack ...