挺懵的。。。
T1
实际上不难。
发现对于同一条边来说。
我们的答案关于我们取得点在这个边上的位置是一个单谷函数,因为两侧取max。
然后直接三分边上所在的位置。
check的时候首先用随便什么最短路处理出每个点之间互相的距离即可求值了。
T2
很棒的二进制分组。
我们把这种满足要求的路径拆成三段\(1->a->b->n\)。
第一段:定向之后的\(1->a\)的最短路。
第二段:\(a->b\)之间不走任何最短路边的最短路。
第三段:定向之后的\(b->n\)的最短路。
发现枚举\(ab\)复杂度太高了。
我们考虑二进制分组跑\(dijk\)(我\(SPFA\)被卡了)就行了。
T3
挺厉害的网络流
具体内容我已经都讲给迪哥听了,于是可以直接粘链接了。
https://www.cnblogs.com/hzoi-DeepinC/p/12234343.html
加个我认为重要的点。
为什么这样建就保证了我们最终的行列流量相等呢?
假设我们当前枚举的最大个数为\(k\)。
那么我设\(i\)行\(i\)列能放的较少的那个的个数是\(r\)。
分情况。
\(fr.k<r\)这种情况肯定先流满了\(k\),因为\(k\)这边费用是0.
然后剩下的流量尝试流\(1\)了。
假设\(i\)行这边流量大个数多,那么我需要流到别人身上\(r-k\)个,表示我这里不要这\(r-k\)个,你这一列也不要这\(r-k\)个,费用是\(r-k\)。答案是正确的,对于这一行来说。
\(se.k>=r\)这样0边流不满。,也就是说我方的比较少,那么就不需要扣下来了,然后别的列可能借我的流,因为此时这一行的个数可能是大于\(r\)的,它需要借我流我就借给他,这样可以保证他那边也正确我这里也正确,因为我这里不能留下这\(hang[i]-r\)个,这些本来没有被\(k\)计算,但是因为我是从整个上面扣芯片所以也要计算贡献。
至于他说的那个负环我是没懂,反正我觉得我的图没负环。
原文地址:https://www.cnblogs.com/Lrefrain/p/12240996.html