题目链接:Captain Flint and Treasure
题意:
一种操作为 选一个下标 使得ans+=a[i] 且 把a[b[i]]+a[i] 要求每个下标都进行一种这样的操作,问怎么样的操作顺序才能使得ans最大
题解:
在题目面板的输入里面说了这是一个有向无环图,我怎么没看到题目上说这是一个图?
我们可以把那个操作当作一条边,而且那个操作还是单向的,所以就成有向无环图了
如果a[i]>=0,那么肯定需要进行这种操作(因为会增加ans的值)。如果a[i]为负数,那么肯定是尽量减少这种操作
那么对于a[i]>=0的数,我们对入度为0的点进行拓扑排序,以使得a[i]尽可能的为最后的答案ans做贡献
对于a[i]<0的数,那么就从出度为0的点开始进行拓扑排序
代码:
1 #include
2 #include
3 #include