yd#1+AHOI2009最小割

yd#1T3 这个题,剥叶子的一步似乎比较显然,然后,数据范围其实我们,分两类考虑

\(2m\le n\)这个是,有可能两个连通块不叫,然后考虑最特殊的两个,最开头和结尾的,然后发现,中间的过渡区是一条链!

然后就好DP了,直接枚举左部的值为m的点,稍微处理一下即可

\(2m > n\)考虑所有连通块都有交,那把交拿出来,大小为\(2m-n\)相当于再这个连通块,前后分别剥掉n-m个点,做个背包即可

\(O(n^4-n^5)\)具体不分析了,差不多

yd#1T4

性质C是关键的,其实我们,给每个点设置一个\(lim=\frac s c\)然后只有超过lim(减到<=0)就更新,这部分是\(O(nlog^2n)\)

一个想法是根号分治,但是我没写,不知道能不能过

考虑更巧妙的设置lim

由于这个lim完全和s相关,总是变化,尝试换一种lim,不然也没法做了

直接给出结论,令\(lim=2^k,k=max_o{c2^o<=s}\)然后,每次有一个lim<0了,先更新s,然后重新设置成lim

每次操作完后,考虑所有改动过的s,然后如果lim要更新就暴力改否则不变

\(O(nlog^2n)\)

其实有一点倍增分块的感觉,反正出现翻倍就试一下把

除此之外,判定最小割可行边/必须边的方法是

先跑出残量网络,并缩点

可行:rt[u]!=rt[v]

必须rt[s]=rt[u],rt[t]=rt[v]

posted on 2026-08-09 22:48  Grylls_117  阅读(5)  评论(0)    收藏  举报