摘要: 因为是异或运算,所以考虑对每一位操作。对于所有已知mark的点,mark的当前位为1则连接(s,i,inf),否则连(i,t,inf),然后其他的边按照原图连(u,v,1),(v,u,1),跑最大流求最小割。然后从s沿着有剩余流量的边dfs,把dfs到的点都与(|)上1,因为是与,所以即使操作到了已 阅读全文
posted @ 2018-02-01 21:54 lokiii 阅读(156) 评论(0) 推荐(0) 编辑
摘要: ~~拆点拆魔怔了~~ 直接按照原图建就行,这里有个小技巧就是双向边的话不用按着板子建(u,v,c)(v,u,0)(v,u,c)(u,v,0),直接建(u,v,c)(v,u,c)会快十倍!800ms 80ms,建完之后跑一遍dinic,然后从s顺着有残余流量的正向边dfs打标记fr并且计数ss,从t顺 阅读全文
posted @ 2018-02-01 16:44 lokiii 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 就是求哪些边在最大流上满流,也就是找割边。把0作为t点,s向所有的1~n连流量为inf的边,其他的边按照流量连。跑一遍最大流,从s顺着有残余流量的正向边dfs打标记fr,从t顺着正向边有残余流量的反向边dfs打标记to,那么满足条件的边就是两端点分别有fr和to标记并且满流(这里只考虑正向边),因为 阅读全文
posted @ 2018-02-01 12:04 lokiii 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 网络流的题总是出各种奇怪的错啊……没写过邻接表版的dinic,然后bfs扫到t点不直接return 1就会TTTTTLE…… 题目中的操作是“去掉人”,很容易想到拆点,套路一般是(s,i')(i,t)(u',v)(v,u),然后关于输出顺序最小方案,可以枚举删点,如果删去一个点后求得最小割比原来的小 阅读全文
posted @ 2018-02-01 09:21 lokiii 阅读(246) 评论(0) 推荐(0) 编辑