写一下这道题目,题目是之前做过的, 但是现在再做一遍感觉有点陌生,说明之前做的时候没有认真思考和总结,现在做完这道题目感觉还挺重要的,还是写一下这道题吧。
自认为可以将这种的题目抽象成: 首先是一个环,其次是环内点和边都有权值,然后让我们求一些东西,比如点的权值和边的权值和之间的比值的最大值之类的,像这样的题目我们一般会发现答案是具有单调性的,我们进行二分,然后判断是否有满足这样的环即可。
写一下判断的方法是 ∑ p o i n t ∑ e d g s > = m i d \frac{\sum point}{\sum edgs} >= mid ∑edgs∑point>=mid
然后推出来 ∑ p o i n t > = ∑ e d g s ∗ m i d \sum point >= \sum edgs * mid ∑point>=∑edgs∗mid
继续然后是 0 > = ∑ e d g s ∗ m i d − ∑ p o i n t 0 >= \sum edgs * mid - \sum point 0>=∑edgs∗mid−∑point
这样我们就判断有没有这样的负环就可以了,那么我们的程序判断的条件就变成了 d i s t [ j ] > d i s t [ t ] ∗ k − p o i n t [ t ] dist[j] > dist[t] * k - point[t] dist[j]>dist[t]∗k−point[t]
这样就可以做了。