Battle

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1662 Accepted Submission(s): 767

Problem Description
由于小白同学近期习武十分刻苦,很快被晋升为天策军的统帅。而他上任的第一天,就面对了一场极其困难的战斗:
据侦查兵回报,前方共有N座城池,考虑到地势原因,最终得到一个结论:攻占某些城池之前必须攻占另外一些城池。
事实上,可以把地图看做是一张拓扑图,而攻占某个城池,就意味着必须先攻占它的所有前驱结点。
小白还做了一份调查,得到了攻占每个城池会对他的兵力产生多少消耗(当然也可能会得到增长,因为每攻占一个城池,便可以整顿军队,扩充兵力,天策军的兵力十分庞大,如果不考虑收益,他们可以攻取所有的城池)。
现在请你帮小白统帅做一份战斗计划,挑选攻打哪些城市,使得天策军在战斗过后军容最为壮大。

Input
首先输入一个N 代表有N个城池(1<= n <= 500)
接着输入一个M,代表城池和城池之间的拓扑关系数。
接着输入N个数字 代表从1 到 N 编号城池的战斗消耗(负数代表将要消耗天策军兵力,正数表示天策军可以获得相应的战斗收益)
最后M行 每行2个数字 a,b,代表相应城池的编号。
表示攻占b之后才可以攻占a;

Output
天策军最大能获得多少战斗收益

Sample Input
5 5
8
-8
-10
12
-10

1 2
2 5
1 4
3 4
4 5

Sample Output
2

Source
2009 Multi-University Training Contest 16 - Host by NIT


挺明显的一道最大权闭合子图问题,在拓扑图中,我们选b之后才能选a,满足弧的弧头也在选出的顶点集中,但是这题是要求我们弧尾在顶点集中,于是我们反向建边即可。


AC代码:

#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int inf=0x3f3f3f3f3f3f3f3f;
const int N=5010,M=1000010;
int n,m,res,h[N],s,t;
int head[N],nex[M],to[M],w[M],tot=1;
inline void ade(int a,int b,int c){to[++tot]=b; nex[tot]=head[a]; w[tot]=c; head[a]=tot;
}
inline void add(int a,int b,int c){ade(a,b,c);  ade(b,a,0);
}
inline int bfs(){memset(h,0,sizeof h);  queue<int> q; q.push(s);  h[s]=1;while(q.size()){int u=q.front();   q.pop();for(int i=head[u];i;i=nex[i]){if(w[i]&&!h[to[i]]){h[to[i]]=h[u]+1;  q.push(to[i]);}}}return h[t];
}
int dfs(int x,int f){if(x==t) return f;   int fl=0;for(int i=head[x];i&&f;i=nex[i]){if(w[i]&&h[to[i]]==h[x]+1){int mi=dfs(to[i],min(w[i],f));w[i]-=mi; w[i^1]+=mi; fl+=mi; f-=mi;}}if(!fl)   h[x]=-1;return fl;
}
inline int dinic(){int res=0;while(bfs())  res+=dfs(s,inf);return res;
}
signed main(){while(~scanf("%lld %lld",&n,&m)){tot=1;    memset(head,0,sizeof head); t=n+1;    res=0;for(int i=1;i<=n;i++){int x;  scanf("%lld",&x);if(x>0)   add(s,i,x),res+=x;else    add(i,t,-x);}while(m--){int a,b;    scanf("%lld %lld",&a,&b); add(a,b,inf);}printf("%lld\n",res-dinic());}return 0;
}

HDU - 3061 Battle相关推荐

  1. HDU 3061 Battle(最小割----最大权闭合图)

    题意: Problem Description 由于小白同学近期习武十分刻苦,很快被晋升为天策军的统帅.而他上任的第一天,就面对了一场极其困难的战斗: 据侦查兵回报,前方共有N座城池,考虑到地势原因, ...

  2. Battle (hdu 3061 最大权闭合图模板题)

    Battle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  3. HDU 5093 Battle ships(二分图最大匹配)

    题意:一个m行n列的图由#.*.o三种符号组成,分别代表冰山.海域.浮冰,问最多可放的炮舰数(要求满足以下条件) 1.炮舰只可放在海域处 2.两个炮舰不能放在同一行或同一列(除非中间隔着一个或多个冰山 ...

  4. 视觉人工智能_视觉锁定是一种有效的智能锁定

    视觉人工智能 Bit by bit, I've increased the intelligence quotient of my home, and done it in a pretty cava ...

  5. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  6. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

  7. 一系列图论问题[转]

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

  8. 图论练习题(存起来练)

    =============================以下是最小生成树+并查集======================================  [HDU]  1213 How Man ...

  9. ACM比赛经验、刷题记录及模板库总结(更新中)

    前言 本文所提及的部分题目代码,可以在我的Github上找到 第一部分 经验分享及感受 第二部分 刷题记录 一.基础算法&程序语言 //strlen()函数的复杂度是O(n)要小心 //截取字 ...

最新文章

  1. python表白-情人节来了,教你个用 Python 表白的技巧
  2. 使用临界区 CRITICAL_SECTION 实现互斥
  3. Android --- 两种设置字体加粗的方法
  4. JZOJ 5267. 费马点问题
  5. Flask框架(flask中设置和获取session)
  6. 计算机二级c语言填空题怎么算分,计算机二级C语言题型和评分标准
  7. 十分钟让你明白AIDL
  8. ASP.NET企业开发框架IsLine FrameWork系列之十二--使用Session、Cookie与安全支持
  9. java post 请求体构建_java – 从HttpServletRequest获取POST请求体
  10. java oop阶段小测试2 机试题答案_Java OOP阶段小测试2_机试题
  11. 按头安利 好看又实用的窗户贴图素材看这里
  12. FineReport帆软报表使用入门
  13. 使用Java快速实现进度条
  14. wxs 实现小程序拖拽功能
  15. Technorati 正在走向衰落
  16. Vue.js / Nuxt.js / uni-app - 移动端 H5 网页,在电脑 PC 上打开时居中显示(手机网页在电脑上打开后,简单粗暴防止 “界面样式“ 拉伸变形的解决方案)适用所有web项目
  17. matlab绘制布尔运算图,干货丨最全的布尔运算制作小图标教程!
  18. Mac用户学Python-Day1:安装与环境配置
  19. Revit二次开发环境搭建(Revit 2019+Visual Studio 2017)
  20. SVM-SMO算法C++实现

热门文章

  1. 上位机学习系列总计笔记(一)
  2. Kubernetes 生产环境安装部署 基于 Kubernetes v1.14.0 之 etcd集群
  3. HBASE中的compaction策略,日期分层
  4. oracle外键约束、级联删除
  5. 【JavaWeb】基于 JSP、EL表达式实现登录,并使用过滤器与监听器
  6. 从另一种角度理解量子力学
  7. unity 性能优化之遮挡剔除(Occlusion Culling) 官方版
  8. CSS中#和.的区别
  9. 【Mac使用技巧】QuickTime Player 如何让声音和视频同步加速播放
  10. php升降调_音乐伴奏升降调软件 怎么给伴奏降调