HDU - 3061 Battle
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相关推荐
- HDU 3061 Battle(最小割----最大权闭合图)
题意: Problem Description 由于小白同学近期习武十分刻苦,很快被晋升为天策军的统帅.而他上任的第一天,就面对了一场极其困难的战斗: 据侦查兵回报,前方共有N座城池,考虑到地势原因, ...
- Battle (hdu 3061 最大权闭合图模板题)
Battle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU 5093 Battle ships(二分图最大匹配)
题意:一个m行n列的图由#.*.o三种符号组成,分别代表冰山.海域.浮冰,问最多可放的炮舰数(要求满足以下条件) 1.炮舰只可放在海域处 2.两个炮舰不能放在同一行或同一列(除非中间隔着一个或多个冰山 ...
- 视觉人工智能_视觉锁定是一种有效的智能锁定
视觉人工智能 Bit by bit, I've increased the intelligence quotient of my home, and done it in a pretty cava ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- 【HDOJ图论题集】【转】
1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...
- 一系列图论问题[转]
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...
- 图论练习题(存起来练)
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Man ...
- ACM比赛经验、刷题记录及模板库总结(更新中)
前言 本文所提及的部分题目代码,可以在我的Github上找到 第一部分 经验分享及感受 第二部分 刷题记录 一.基础算法&程序语言 //strlen()函数的复杂度是O(n)要小心 //截取字 ...
最新文章
- python表白-情人节来了,教你个用 Python 表白的技巧
- 使用临界区 CRITICAL_SECTION 实现互斥
- Android --- 两种设置字体加粗的方法
- JZOJ 5267. 费马点问题
- Flask框架(flask中设置和获取session)
- 计算机二级c语言填空题怎么算分,计算机二级C语言题型和评分标准
- 十分钟让你明白AIDL
- ASP.NET企业开发框架IsLine FrameWork系列之十二--使用Session、Cookie与安全支持
- java post 请求体构建_java – 从HttpServletRequest获取POST请求体
- java oop阶段小测试2 机试题答案_Java OOP阶段小测试2_机试题
- 按头安利 好看又实用的窗户贴图素材看这里
- FineReport帆软报表使用入门
- 使用Java快速实现进度条
- wxs 实现小程序拖拽功能
- Technorati 正在走向衰落
- Vue.js / Nuxt.js / uni-app - 移动端 H5 网页,在电脑 PC 上打开时居中显示(手机网页在电脑上打开后,简单粗暴防止 “界面样式“ 拉伸变形的解决方案)适用所有web项目
- matlab绘制布尔运算图,干货丨最全的布尔运算制作小图标教程!
- Mac用户学Python-Day1:安装与环境配置
- Revit二次开发环境搭建(Revit 2019+Visual Studio 2017)
- SVM-SMO算法C++实现
热门文章
- 上位机学习系列总计笔记(一)
- Kubernetes 生产环境安装部署 基于 Kubernetes v1.14.0 之 etcd集群
- HBASE中的compaction策略,日期分层
- oracle外键约束、级联删除
- 【JavaWeb】基于 JSP、EL表达式实现登录,并使用过滤器与监听器
- 从另一种角度理解量子力学
- unity 性能优化之遮挡剔除(Occlusion Culling) 官方版
- CSS中#和.的区别
- 【Mac使用技巧】QuickTime Player 如何让声音和视频同步加速播放
- php升降调_音乐伴奏升降调软件 怎么给伴奏降调