NOI2009植物大战僵尸

因为昨天做了一道最大获利,所以感觉思路差不多

对于每个植物,首先思考如果它们score都是整数的时候,贪心就好了,可以到达的就攻击

然而植物的score有负数,所以植物就可以分为获得收益的和付出代价的

这样大体思路就是分为两部分,代价连源点,收益连汇点,中间有保护关系的连不可删边,再跑个最小割

然而这个题的细节还是让我这个菜鸡一遍爆0

首先,显而易见的保护关系是攻击型的植物对攻击位置的保护关系

但是还有一些保护关系,例如想要攻击左边的植物就必须除掉右边的植物,所以还有这层隐藏保护关系

所以这些保护关系就能构成一个图,但这个图并不是一个DAG,环上的点以及环上的点都是不可除掉的点,这些点必须处理出来,不能放到网络流图中(样例还是比较良心的,能让人发现必须处理这种情况)

还有对于这类互相保护求最大收益跑最小割的问题,作为一个菜鸡我理解的也不是很透,但是可以发现,例如原图中关系为a保护b,b保护c,如果不直接处理成直接关系,从a向c连边,是会出问题的(这样的话边数会比较多,然而看一看数据范围这么小,NOI的题数据范围这么小肯定是有原因的啊)

#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
#define INF ((int)1e9)
#define fr(i,s,t) for(i=s;i<=t;i++)
using namespace std;
struct edge{
	i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值