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 ...
随机推荐
- 多条查询sql语句返回多表数据集
+ + "';SELECT ProductID,ProductTitle,ProductName,SalePrice,ListingPrice,MainPicture,SaledItemCo ...
- Linux sed命令实例详解
简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...
- 【转载】FLUNT温度场模拟
1. Gambit 绘制几何计算域,划分网格,定义边界类型 2. fluent设置以及计算 注意: define->models->energy 打开能量方程 de ...
- ZOJ 3822(求期望)
Domination Time Limit: 8 Seconds Memory Limit: 131072 KB Special Judge Edward is the headm ...
- 一个简单的excel文件上传到数据库方法
因为以前项目中有用到过Excel导入,所以整理了一下,这是一个导入Excel数据到数据库的方法 注意:需要导入poi jar包 代码清单 /** * Excel 导入 * @param mapping ...
- 强大的Resharp插件
使用VS有段时间了,一直深深的折服于其强大的功能.之前一直听说有Resharp这个工具,小猪一直也没有太在意.直到今天…… 下载安装: http://www.jetbrains.com/resharp ...
- JQuery判断checkbox是否选中-批量
在html的checkbox里,选中的话会有属性checked="checked". 如果用一个checkbox被选中,alert这个checkbox的属性"checke ...
- Expression<Func<T, bool>>
public static Expression<Func<T, bool>> True<T>() { return f => true; } public ...
- 李明杰视频 SVN
李明杰视频 SVN 就10-12使用技术SVN 源代码会引发哪些问题? 无法后悔:做错一个操作 版本备份:费控件,费时间 版本混乱:因版本备份太多造成混乱 代码冲突:多人操作同一文件 强烈建议 使用源 ...
- GCJ 2015-Qualification-A Standing Ovation 难度:0
https://code.google.com/codejam/contest/6224486/dashboard#s=p0 肯定把朋友们都设置在第0位,在第i位前面必须至少有i个人鼓掌,所以答案加上 ...