题目链接:POJ
CodeVs
由于是英文题目就不再复制题面了~
昨天看CV月赛的题看到这个题,因为Std有个地方看不懂所以自己再做了一下。
首先本题仔细读题后发现求最大值,于是就跑最短路:
然后再仔细读题会发现3个约束条件:
①:两个妹子不和,b-a >= c的情况,将它转化为最短路形式的约束条件就是:a<=b-c(这里我用的我总结的方法,链接:QAQAQAQ)这种情况下是b向a建一条权值为-c的边
②:两个妹子是百合,b-a<=c的情况,将它转换变成了:b<=a+c,即a向b建一条权值为c的边。
③:两个位置可以重合,但我们按从左向右的顺序来的话就是a <= b,即b向a建一条权值为0的边。
这样约束条件都列举了出来,之后再建边就行了,-1的情况是无解的情况,即存在负环,-2的情况是无法约束1到n距离的情况,即再约束系统中没有从1到达n的路径,如果都不是上面两种情况,就输出答案。
网上有篇std是将约束条件①反过来读,就是先读b再读a然后b->a建边……和我的想法其实是一致的QAQ
完整代码: