hdu 4971/ 2014多校/最大权闭合图
题意:n个项目(每一个相应获得一定价值)。m个技术问题(每一个须要支出一定价值),每一个项目必须要攻克若干个技术问题。技术难题之间有拓扑关系。
关键是建图。一看,第一感觉就是最大权闭合图,马上建好了图。不难:以项目为正权点,问题为负权点。有依赖关系的点边就可以。
ps:这题题目有句话有问题,按例子的来!害我贡献一次WA.....
#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxv=200,maxe=10000;
int e[maxe][3];int head[maxv];int nume=0;
void inline adde(int i,int j,int w)
{
e[nume][0]=j;e[nume][1]=head[i];head[i]=nume;
e[nume++][2]=w;
e[nume][0]=i;e[nume][1]=head[j];head[j]=nume;
e[nume++][2]=0;
}
int n,m,ss,tt;
int vis[maxv];int lev[maxv];
bool bfs()
{
for(int i=0;i<maxv;i++)
vis[i]=lev[i]=0;
queue<int>q;
q.push(ss);
vis[ss]=1;
while(!q.empty())
{
int cur=q.front();
q.pop();
for(int j=head[cur];j!=-1;j=e[j][1])
{
int v=e[j][0];
if(!vis[v]&&e[j][2]>0)
{
lev[v]=lev[cur]+1;
vis[v]=1;
q.push(v);
}
}
}
return vis[tt];
}
int dfs(int u,int minf)
{
if(u==tt||minf==0)return minf;
int sumf=0,f;
for(int j=head[u];j!=-1&&minf;j=e[j][1])
{
int v=e[j][0];
if(lev[v]==lev[u]+1&&e[j][2]>0)
{
f=dfs(v,minf<e[j][2]? minf:e[j][2]);
e[j][2]-=f;e[j^1][2]+=f;
sumf+=f; minf-=f;
}
}
if(sumf==0)lev[u]=-1;
return sumf;
}
int dinic()
{
int sum=0;
while(bfs())sum+=dfs(ss,inf);
return sum;
}
void init()
{
nume=0;
for(int i=0;i<maxv;i++)
head[i]=-1;
}
int main()
{
int T;
scanf("%d",&T);
for(int ii=1;ii<=T;ii++)
{
init();
scanf("%d%d",&n,&m);
ss=n+m;tt=ss+1; int sumz=0;
int aa,bb;
for(int i=0;i<n;i++)
{
scanf("%d",&aa);
adde(ss,i,aa);sumz+=aa;
}
for(int i=0;i<m;i++)
{
scanf("%d",&aa);
adde(i+n,tt,aa);
}
for(int i=0;i<n;i++)
{
scanf("%d",&aa);
while(aa--)
{
scanf("%d",&bb);
adde(i,bb+n,inf);
}
}
for(int i=0;i<m;i++)
for(int j=0;j<m;j++)
{
scanf("%d",&aa);
if(aa==1)
{
adde(i+n,j+n,inf);
}
}
/* for(int i=0;i<n+m+2;i++)
for(int j=head[i];j!=-1;j=e[j][1])
{
int v=e[j][0];
if(j%2==0)
printf("%d->%d:%d\n",i,v,e[j][2]);
}*/
int ans=sumz-dinic();
printf("Case #%d: %d\n",ii,ans);
}
return 0;
}
hdu 4971/ 2014多校/最大权闭合图的更多相关文章
- HDU 3061:Battle(最大权闭合图)
http://acm.hdu.edu.cn/showproblem.php?pid=3061 题意:中文题意. 思路:和上一题神似啊,比上一题还简单,重新看了遍论文让我对这个理解更加深了. 闭合图:如 ...
- hdu 3917 修路与公司 最大权闭合图 好题
Road constructions Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- hdu 4971 多校10最大权闭合图
/* 很明显的最大权闭合图题 */ #include<stdio.h> #include<string.h> #include<queue> using names ...
- hdu - 4971 - A simple brute force problem.(最大权闭合图)
题意:n(n <= 20)个项目,m(m <= 50)个技术问题,做完一个项目能够有收益profit (<= 1000),做完一个项目必须解决对应的技术问题,解决一个技术问题须要付出 ...
- HDU 4971 - A simple brute force problem【最大权闭合图】
有n(20)个工程,完成每个工程获得收益是p[i],m(50)个需要解决的难题,解决每个难题花费是c[i] 要完成第i个工程,需要先解决ki个问题,具体哪些问题,输入会给出 每个难题之间可能有依赖关系 ...
- hdu 3061 Battle 最大权闭合图
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3061 由于小白同学近期习武十分刻苦,很快被晋升为天策军的统帅.而他上任的第一天,就面对了一场极其困难的 ...
- hdu 3879 Base Station 最大权闭合图
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3879 A famous mobile communication company is plannin ...
- hdu 3061 hdu 3996 最大权闭合图 最后一斩
hdu 3061 Battle :一看就是明显的最大权闭合图了,水提......SB题也不说边数多少....因为开始时候数组开小了,WA....后来一气之下,开到100W,A了.. hdu3996. ...
- HDU 3879 && BZOJ 1497:Base Station && 最大获利 (最大权闭合图)
http://acm.hdu.edu.cn/showproblem.php?pid=3879 http://www.lydsy.com/JudgeOnline/problem.php?id=1497 ...
随机推荐
- 【华为OJ平台练习题】求最大公共子串的个数和元素
1.原题是求出最大公共子串的个数就可以 原理:利用二维矩阵排列的方式.将俩字符串进行比較 #include <iostream> #include <vector> using ...
- 在Foreda上安装apache-tomcat-7.0.42.tar.gz
开发环境JDK和Tomcat应该和部署环境一致,要不容易出现奇奇怪怪的问题.所以Aspire机器上的Tomcat要装一个新版本了. 装Tomcat基本等于一个解压和移动的过程,确实简单. 第一步:解压 ...
- TextView跑步灯效果及在特殊情况下无效的解决方式
概述: 关于在TextView中使用跑马灯效果的样例在网上一搜一大把.他们可能会让你像以下这样来在xml中定义TextView控件的属性.而事实也确是如此. 只是我不知道他们有没有遇到和我一样的问题( ...
- 谈谈Boost网络编程(2)—— 新系统的设计
写文章之前.我们一般会想要採用何种方式,是"开门见山",还是"疑问式开头".写代码也有些类似.在编码之前我们须要考虑系统总体方案,这也就是各种设计文档的作用.在 ...
- java面试第十一天
多线程: 进程与线程: 进程:同一个操作系统中执行的一个子程序,包含了三部分虚拟CPU.代码.数据 多进程:同一个操作系统中执行的多个并行的子程序.可以提高cpu的使用率 线程:在同一个进程当中执行的 ...
- Linux下Tar压缩使用
具体的可以在linux环境下 用tar --help查看详细说明格式:tar [option] file -c create create a new archive -x extract extra ...
- java 类名.class、object.getClass()和Class.forName()的区别 精析
1.介绍 getClass()介绍 java是面向对象语言,即万物皆对象,所有的对象都直接或间接继承自Object类: Object类中有getClass()方法,通过这个方法就可以获得一个实 ...
- eclipse 修改maven项目的jdk版本
eclipse 修改maven项目的jdk版本 CreationTime--2018年6月8日10点29分 Author:Marydon 1.情景展示 jdk版本太低,如何修改 2.错误方式 第一 ...
- spring aop的两种写法aspect和advisor
本文转自:https://www.cnblogs.com/leiOOlei/p/3709607.html 首先看个例子,如下 接口代码: package com.lei.demo.aop.schema ...
- spring cloud学习地址
http://book.itmuch.com/1%20%E5%BE%AE%E6%9C%8D%E5%8A%A1%E7%AE%80%E4%BB%8B/1%20%E5%BE%AE%E6%9C%8D%E5%8 ...