UOJ 210 UER 6 尋找罪犯

2022-06-03 07:18:09 字數 1446 閱讀 7292

有n個人分為好人和壞人,說了m句話。好人不會說假話,壞人至多說一句謊話。求出一組解,滿足要求。

利用2-sat拆點,乙個人拆成兩個點,表示他是好人和壞人。然而這樣的話邊數是m^2的,所以用前/字尾和優化構圖即可。

1 #include 2

using

namespace

std;34

const

int n = 1e6 + 10;5

const

int m = 3e6 + 10

;6 inline int

read()710

while(ch >= '

0' && ch <= '

9')

11return x *f;12}

13int

n, m;

14int

h[n], e[m], ne[m], idx;

15int dfn[n], low[n], num, in

[n], stac[n], top, pre[n];

16int

c[n], cnt;

1718

void add(int a, int

b)19

2425

int crm(int x, int

f)26

2930

int word(int x, int

f)31

3435

void tarjan(int

u)36

48else

if(in

[j])

49 low[u] =min(low[u], dfn[j]);50}

51if(low[u] ==dfn[u])

52while(z !=u);60}

61}6263

64int

main()

6586

for (int i = 1; i <= n; i ++)

8791

for (int i = 1; i <= (n + m) * 2; i ++)

92if(!dfn[i])

93tarjan(i);

94bool flag = true;95

for (int i = 1; i <= n; i ++)

96102

}103

for (int i = 1; i <= m; i ++)

104110

}111

if(!flag)

112115

else

116123 cout << ans.size() << '\n'

;124

for (int i = 0; i < ans.size(); i ++)

125128

}129 }

view code

210 UER 6 尋找罪犯

開始就感覺是 二分圖 然後就棄t1後就一直想一直想 然而也沒想出來 暴力都沒法打啊.題解確實是二分圖 演算法四的優化也是非常神 神的到現在也沒看懂.60 include include include include includeusing namespace std const int n 80...

UOJ210 尋找罪犯 字首邊優化2 SAT

學了一天2 sat 從不會到尋找罪犯,感覺成就感滿滿 順便還嘴巴ac了 noi2017遊戲 雖然這就是一道水題,真的是水題 uoj210傳送門 題面me就不貼了 要看的話可以戳傳送門 emmmm網上的做法為什麼都那麼簡單啊woc?感覺全世界就me建邊最多 這道題的限制條件還是很清晰了 1.一句話,不...

uoj 209 UER 6A 票數統計

給出n個數,每個數是0或1.再給出m個限制,每個限制 x,y 表示 前x個數中有y個1 或 後y個數中有x個1 求這樣的序列的個數。n 5000,m 1000 再一次被uer給虐了。其實這道題劼鏼爺已經講的很清楚了。撲通撲通跪下來 當x y的時候,很顯然已經確定這個限制是限制字首還是字尾的。當x y...