HDU 4971 (最小割)
Problem A simple brute force problem (HDU 4971)
题目大意
有n个项目和m个问题,完成每个项目有对应收入,解决每个问题需要对应花费,给出每个项目需解决的问题以及各问题间的依赖关系,求最大利润。
解题分析
最大权闭合子图 用来解决一下有依赖关系的问题。
X集权值为正,Y集权值为负。X集的某些点依赖于Y集,Y集的某些点互相依赖。
从S向X集的每个点连流量为权值的边,y集的每个点向T连流量为权值的边,若两个点互相依赖,则连一条权值为INF的边。
求一遍最小割,最后答案为X集总权值减去最小割。
参考程序
- #include <cstdio>
- #include <algorithm>
- #include <cstring>
- #include <queue>
- using namespace std;
- #define INF 2000000000
- #define V 100
- #define E 100000
- int n,m,ans,dis[V],S,T;
- struct line{
- int u,v,c,nt;
- }eg[E];
- int lt[V],sum=;
- void adt(int u,int v,int c){
- eg[++sum].u=u; eg[sum].v=v; eg[sum].c=c; eg[sum].nt=lt[u]; lt[u]=sum;
- }
- void add(int u,int v,int c){
- adt(u,v,c); adt(v,u,);
- }
- void init(){
- memset(lt,,sizeof(lt));
- sum=; ans=;
- }
- bool bfs(){
- memset(dis,,sizeof(dis));
- dis[S]=;
- queue<int> Q;
- Q.push(S);
- while (!Q.empty()){
- int u=Q.front();
- Q.pop();
- for (int i=lt[u];i;i=eg[i].nt){
- int v=eg[i].v;
- if (eg[i].c && !dis[v]){
- dis[v]=dis[u]+;
- Q.push(v);
- }
- }
- }
- return dis[T]>;
- }
- int dfs(int u,int flow){
- if (u==T) return flow;
- int res=,f;
- for (int i=lt[u];i;i=eg[i].nt){
- int v=eg[i].v;
- if (eg[i].c&&dis[v]==dis[u]+){
- f=dfs(v,min(flow-res,eg[i].c));
- res+=f;
- eg[i].c-=f;
- eg[i ^ ].c+=f;
- if (flow==res) break;
- }
- }
- if (!res) dis[u]=-;
- return res;
- }
- int dinic(){
- int sum=;
- while (bfs()) sum+=dfs(S,INF);
- return sum;
- }
- int main(){
- int Tp,cas=;
- scanf("%d",&Tp);
- while (Tp--){
- init();
- scanf("%d %d",&n,&m);
- S=,T=n+m+;
- int x;
- for (int i=;i<=n;i++){
- scanf("%d",&x);
- add(S,i,x);
- ans+=x;
- }
- for (int i=;i<=m;i++){
- scanf("%d",&x);
- add(i+n,T,x);
- }
- for (int i=;i<=n;i++){
- int num;
- scanf("%d",&num);
- for (int j=;j<=num;j++){
- scanf("%d",&x);
- add(i,x++n,INF);
- }
- }
- for (int i=;i<=m;i++)
- for (int j=;j<=m;j++){
- scanf("%d",&x);
- if (x) add(i+n,j+n,INF);
- }
- n=T;
- printf("Case #%d: %d\n",++cas,ans-dinic());
- }
- }
HDU 4971 (最小割)的更多相关文章
- hdu 4289(最小割)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4289 思路:求最小花费,最小割应用,将点权转化为边权,拆点,(i,i+n)之间连边,容量为在城市i的花 ...
- hdu 5076 最小割灵活运用
这意味着更复杂的问题,关键的事实被抽象出来:每个点,能够赋予既有的值(挑两个一.需要选择,设定ai,bi). 寻找所有和最大.有条件:如果两个点同时满足: 1,:二进制只是有一个不同之处. 2:中的 ...
- Game HDU - 3657(最小割)
Game Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu 1565 最小割
黑白染色,源指向白,黑指向汇,容量都是方格中数的大小,相邻的格子白指向黑,容量为oo,然后求一次最小割. 这个割是一个简单割,如果只选择不在割中的点,那么一种割就和一个选数方案一一对应,割的大小就是不 ...
- hdu 3657 最小割的活用 / 奇偶方格取数类经典题 /最小割
题意:方格取数,如果取了相邻的数,那么要付出一定代价.(代价为2*(X&Y))(开始用费用流,敲升级版3820,跪...) 建图: 对于相邻问题,经典方法:奇偶建立二分图.对于相邻两点连边2 ...
- Being a Hero (hdu 3251 最小割 好题)
Being a Hero Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdu 3657 最小割(牛逼!!!!)总算理解了
<strong></strong> 转载:http://blog.csdn.net/me4546/article/details/6662959 加颜色的太棒了!!! 在网上看 ...
- hdu 3691最小割将一个图分成两部分
转载地址:http://blog.csdn.net/xdu_truth/article/details/8104721 题意:题给出一个无向图和一个源点,让你求从这个点出发到某个点最大流的最小值.由最 ...
- [HDU 3521] [最小割] Being a Hero
题意: 在一个有向图中,有n个点,m条边$n \le 1000 \And \And m \le 100000$ 每条边有一个破坏的花费,有些点可以被选择并获得对应的金币. 假设一个可以选的点是$x$ ...
- hdu 1569 最小割
和HDU 1565是一道题,只是数据加强了,貌似轮廓线DP来不了了. #include <cstdio> #include <cstring> #include <que ...
随机推荐
- 在CentOS 7 MySQL / MariaDB
在CentOS7中,MariaDB 替代了MySQL;更多复杂的疑问可以在这里查看 MariaDB versus MySQL – Compatibility Install MySQL / Mari ...
- 《JavaScript权威指南》读书笔记(三)
日期:2015-12-05 浏览器location和history: replace不会显示历史,location会: history对象脚本不能真正访问,但支持三种方法:back().foward( ...
- Sql语句统计多表个数并求和
) FROM ((SELECT BaseID FROM dbo.Life_cheliang WHERE BaseCreateDate BETWEEN '2015-6-5' AND '2015-6-11 ...
- hat linux下vnc的安装
1.在系统文件下找到vnc的rpm包(检测是否安装vnc) 系统文件寻找方法 进入到根目录(可通过pwd确认当前目录,/则表示根目录) 根目录下有个一个media,进入此目录 media目录下有个一个 ...
- JQuery时间轴timeline插件的学习-Lateral On-Scroll Sliding with jQuery+technotarek / timeliner
一.Lateral On-Scroll Sliding with jQuery的使用 View demo Download source 1. HTML结构 <div id=" ...
- 一致性哈希算法——算法解决的核心问题是当slot数发生变化时,能够尽量少的移动数据
一致性哈希算法 摘自:http://blog.codinglabs.org/articles/consistent-hashing.html 算法简述 一致性哈希算法(Consistent Hashi ...
- spring mvc表单自动装入实体对象
<form action="/springmvc1/user/add" method="post"> id: <input type=&quo ...
- Android 解压html压缩数据
public static String unzipHTML(String s){ int endPos = s.indexOf("\r\n\r\n"); if(endPos< ...
- 判断comboBox是否选对了绑定的数据库中的项
实现: comboBox1下拉列表已绑定数据库,将选中的项保存到数据库时,判断是否已选中下拉列表里的项 如果没选中,或者输入了其他的值,和已绑定的数据不匹配,出现提示框 按钮的点击事件中: strin ...
- sql遍历树
oracle有直接的sql来遍历一颗树的子节点和父节点 遍历一个节点的所有子节点(classid的值就是该节点的值) select * from organization_ a start with ...