洛谷OJ:P3119 [USACO15JAN]草鉴定Grass Cownoisseur(强连通分量+DAG求最长路)

思路:先缩点处理,之后就比较难了,因为要选一条边逆向走,总不能用枚举的方法来做把,考虑到缩点后的图必然是一个DAG(有向无环图),于是我们只需要考虑两类点:

第一类点:能够从草场1所在的点到达的点

第二类点:能够从所在点到达草场1的点

那么我们只要求出从草场1所在点走到每个第一类点的最大收益Ai和从从二类点所在点走到一类点的最大收益Bi即可求出答案

前者是很容易求的,但是后者怎么求呢?很简单,只需要将图反向,那么能从1所在点到达的点便是二类点,所以后者也很容易的就解决了。

最后我们要做的就是枚举出每个二类点或者一类点,如果该这个二类点或一类点与另外一种点间有一条边的话,就算出Ai+Bi的值再加上1号草场所在点的值即可得出答案

#include <iostream>
#include <cstring>
#include <cstdio>
#define init(a,b) memset(a, b, sizeof(a))
#define Min(a,b) a<b?a:b
#define Max(a,b) a>b?a:b
#define debug(a) printf("Debug %d\n", a)
using namespace std;

const int maxn &#
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值