AFO

2-sat

果然我还是不会2-sat

大概就是处理一些真假关系,把每个点拆成真假两个

如果a是真的b比是假的就从a的真连一条边到b的假,b的真连一条边到a的假

如果最后两个点在同一个环中那他们必同时选,所以如果缩点以后a的真假同时在一个强联通分量里就没有解

输出任意解的话看一下a的真假哪个的dfs序大就选哪个,tarjan缩点的顺序是反的所以选强联通分量编号小的那个

210. 【UER #6】寻找罪犯

考虑每句话的真假和每个人是不是罪犯

如果a是不罪犯的话那他的话一定都是真的,如果x说y是罪犯那如果y是罪犯这句话就是真的,否则x的话除了这句都是真的且x是罪犯,但这样的话边数是\(O(n^2)\)

考虑前缀和优化,如果g这句话是假的话那么g之前的话一定都是对的,从\(g_y\)的假连向\(g-1\)的真;如果g这句话是真的的话\(g_y\)一定和\(g_x\)所说一致,从\(g_y\)的真连向\(g\)的真;如果g这句话的前缀都是真的的话那么\(g-1\)的前缀一定也是真的,从\(g\)的真连向\(g-1\) 的真;如果a的话的最后一句的前缀里面有假话的话那么a一定是一个罪犯

posted @ 2019-02-13 19:13  ZUTTER☮  阅读(141)  评论(0编辑  收藏  举报