题意: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多校/最大权闭合图的更多相关文章

  1. HDU 3061:Battle(最大权闭合图)

    http://acm.hdu.edu.cn/showproblem.php?pid=3061 题意:中文题意. 思路:和上一题神似啊,比上一题还简单,重新看了遍论文让我对这个理解更加深了. 闭合图:如 ...

  2. hdu 3917 修路与公司 最大权闭合图 好题

    Road constructions Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  3. hdu 4971 多校10最大权闭合图

    /* 很明显的最大权闭合图题 */ #include<stdio.h> #include<string.h> #include<queue> using names ...

  4. hdu - 4971 - A simple brute force problem.(最大权闭合图)

    题意:n(n <= 20)个项目,m(m <= 50)个技术问题,做完一个项目能够有收益profit (<= 1000),做完一个项目必须解决对应的技术问题,解决一个技术问题须要付出 ...

  5. HDU 4971 - A simple brute force problem【最大权闭合图】

    有n(20)个工程,完成每个工程获得收益是p[i],m(50)个需要解决的难题,解决每个难题花费是c[i] 要完成第i个工程,需要先解决ki个问题,具体哪些问题,输入会给出 每个难题之间可能有依赖关系 ...

  6. hdu 3061 Battle 最大权闭合图

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3061 由于小白同学近期习武十分刻苦,很快被晋升为天策军的统帅.而他上任的第一天,就面对了一场极其困难的 ...

  7. hdu 3879 Base Station 最大权闭合图

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3879 A famous mobile communication company is plannin ...

  8. hdu 3061 hdu 3996 最大权闭合图 最后一斩

    hdu 3061 Battle :一看就是明显的最大权闭合图了,水提......SB题也不说边数多少....因为开始时候数组开小了,WA....后来一气之下,开到100W,A了.. hdu3996. ...

  9. HDU 3879 && BZOJ 1497:Base Station && 最大获利 (最大权闭合图)

    http://acm.hdu.edu.cn/showproblem.php?pid=3879 http://www.lydsy.com/JudgeOnline/problem.php?id=1497 ...

随机推荐

  1. EasyUI-datagrid-自动合并单元格

    1.目标 1.1表格初始化完成后,已经自动合并好需要合并的行: 1.2当点击字段排序后,重新进行合并: 2.实现 2.1 引入插件 /** * author ____′↘夏悸 * create dat ...

  2. WordPress 如何搜索文章内容而不搜索页面

    如何在WordPress 中只搜索指定的文章类型?在http://www.wpbeginner.com上了解到通过WP提供的钩子"pre_get_posts"方法可能实现 该钩子方 ...

  3. cognos report同比环比以及默认为当前月分析

    现在的需求是按月份分析不同时期的余额数据,.(报表工具:cognos report:建模工具:FM) ------------------------------------------------- ...

  4. COM结构化存储中存储对象或者流对象的命名规则

      COM结构化存储中存储对象或者流对象的命名规则

  5. JS字符串false转boolean

    大家都知道在JS的世界里, 0.-0.null."".false.undefined 或 NaN,这些都可以自动转化为布尔的 false,那么字符串的"false&quo ...

  6. [Node.js]27. Level 5: URL Building & Doing the Request

    Let's create a page which calls the twitter search API and displays the last few results for Code Sc ...

  7. C++运行库 Neptune C++ Runtime Library(xbmc)

    一个可以在多个平台C++开发环境下编译运行的C++运行库.其中包括了对多个C++库和平台SDK(HTTP/TCP/UDP/XML, Thread/Message, String, List/Stack ...

  8. Java高并发syncronized深入理解

    1.Synchronized的作用: 能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果. 2.地位: 1)Synchronized是java的关键字,并java的怨言原生支持: ...

  9. CSS3 GPU硬件加速

    1.代码(未添加GPU加速代码) <!DOCTYPE html> <html lang="zh-CN"> <head> <meta cha ...

  10. 解决Cydia出现红字提示“Sub-process/usr/bin/dpkg returned an error code(2)

    进入此路径/var/lib/dpkg/,修改红框中的文件名,依次修改为:"available" 重新命名为 "available-bak":"stat ...