【bzoj1565】【NOI2009】【植物大战僵尸】【拓扑排序+最小割】
发布日期:2021-11-16 15:38:26
浏览次数:6
分类:技术文章
本文共 1405 字,大约阅读时间需要 4 分钟。
Description
Input
Output
仅包含一个整数,表示可以获得的最大能源收入。注意,你也可以选择不进行任何攻击,这样能源收入为0。
Sample Input
3 2
10 0
20 0
-10 0
-5 1 0 0
100 1 2 1
100 0
10 0
20 0
-10 0
-5 1 0 0
100 1 2 1
100 0
Sample Output
25
HINT
在样例中, 植物P1,1可以攻击位置(0,0), P2, 0可以攻击位置(2,1)。
一个方案为,首先进攻P1,1, P0,1,此时可以攻击P0,0 。共得到能源收益为(-5)+20+10 = 25。注意, 位置(2,1)被植物P2,0保护,所以无法攻击第2行中的任何植物。 【大致数据规模】 约20%的数据满足1 ≤ N, M ≤ 5; 约40%的数据满足1 ≤ N, M ≤ 10; 约100%的数据满足1 ≤ N ≤ 20,1 ≤ M ≤ 30,-10000 ≤ Score ≤ 10000 。题解:考虑点和点之间的限制条件。
对于每个点,从它向它保护的点连边。
在把所有点向它左边的点连边。
可以发现如果这个图中的环和环连出去的边肯定不可能被摧毁。
所以我们做一遍拓扑排序就可以把这些点都去掉。
然后把所有的边反向,做最大权闭合子图即可。
代码:
#include#include #include #define N 1100#define M 1000010#define INF 2100000000using namespace std;int point[N],next[M],n,m,q[N*10],head[N],to[M],d[N],x,y;int cnt(1),T,cur[N],gap[N],pre[N],dis[N],w[N],num,a,s,sum;bool f,vis[N];struct use{int st,en,v;}e[M],aa[M]; void add(int x,int y,int v){ //cout< <<' '< <<' '< < 0) add(1,i+1,w[i]),sum+=w[i]; if (w[i]<0) add(i+1,T,-w[i]); for (int j=head[i];j;j=to[j]) if (vis[aa[j].en]) add(aa[j].en+1,i+1,INF); }}int main(){ scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) for (int j=1;j<=m;j++){ scanf("%d%d",&a,&s); w[cal(i,j)]=a; for (int k=1;k<=s;k++){ scanf("%d%d",&x,&y); insert(cal(i,j),cal(x+1,y+1)); } } for (int i=1;i<=n;i++) for (int j=1;j<=m;j++){ int xx=i,yy=j-1; if (xx<1||xx>n||yy<1||yy>m) continue; insert(cal(i,j),cal(xx,yy)); } build(); cout<
转载地址:https://blog.csdn.net/sunshinezff/article/details/51004285 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年03月30日 08时22分28秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【Leetcode刷题篇】leetcode739 每日温度
2019-04-26
【Leetcode刷题篇】leetcode121买卖股票的最佳时机
2019-04-26
【面试篇】Java多线程并发-Java关键字volatile详解
2019-04-26
【面试篇】Java的代理模式-静态代理和动态代理详解
2019-04-26
【面试篇】 Java对象拷贝(对象克隆 对象复制)
2019-04-26
【Leetcode刷题篇】leetcode64 最小路径和
2019-04-26
【Leetcode刷题篇】leetcode79 单词搜索
2019-04-26
【Leetcode刷题篇】leetcode300 最长上升子序列
2019-04-26
【Leetcode刷题篇】leetcode394 字符串解码
2019-04-26
【Leetcode刷题篇】leetcode152 乘积最大数组
2019-04-26
【Leetcode刷题篇】leetcode56 合并区间
2019-04-26
【Leetcode刷题篇】leetcode210 课程表II
2019-04-26
【Leetcode刷题篇】leetcode207 课程表
2019-04-26
【Leetcode刷题篇】leetcode322 零钱兑换
2019-04-26
【Leetcode刷题篇】leetcode437 路径总和III
2019-04-26
【Leetcode刷题篇】leetcode416 分割等和子集
2019-04-26
【Leetcode刷题篇】leetcode31 下一个排列
2019-04-26
【Leetcode刷题篇】leetcode621 任务调度器
2019-04-26
【Leetcode刷题篇/面试篇】通俗易懂详解动态规划-背包问题详解
2019-04-26
【面试篇】HashMap1.7和HashMap1.8的详细区别对比
2019-04-26