【POI每日题解 #5】 DWU-Double-row
題目鏈接?[POI2005]DWU-Double-row
wwwww
之前寫了半小時(shí) 一卡機(jī) 沒(méi)啦QAQ
?
簡(jiǎn)單說(shuō)一下吧 【吐血ing
這道題長(zhǎng)得好二分圖啊
所以本能地連邊
一種是A邊 連可交換的數(shù)對(duì)
一種是B邊 連相同的數(shù)字
?
然后才看題干【Facepalm
發(fā)現(xiàn)要求使同一側(cè)沒(méi)有重復(fù)顏色的最小交換次數(shù)
然后發(fā)現(xiàn) AB都連上仿佛可做
?
由于最多兩個(gè)相同數(shù)字
數(shù)對(duì)也是一對(duì)一
每一條長(zhǎng)度連起來(lái)大于1的路都是A-B-A-B……
?
不在一個(gè)聯(lián)通快里的點(diǎn)沒(méi)有相互影響
?
現(xiàn)在考慮同色同側(cè)
只有這種情況 邊的起點(diǎn)和終點(diǎn)才在同一側(cè)
自然想到0-1染色
?
舉個(gè)栗子
?
?接著我們發(fā)現(xiàn) 要使同側(cè)無(wú)同色
必須要左側(cè)所有點(diǎn)為同一顏色
因?yàn)槿绻胁煌伾狞c(diǎn)
則說(shuō)明它們之間連接的路上有起點(diǎn)終點(diǎn)同側(cè)的邊
也就是同色同側(cè) 不成立
?
那么怎么改成相反色呢?
每個(gè)點(diǎn)連接的1~2條邊的另一端點(diǎn)一定是異色 換一下就行了
點(diǎn)的數(shù)量沒(méi)有變 不影響其他點(diǎn)顏色
?
考慮0,1對(duì)稱
對(duì)于每個(gè)聯(lián)通快 左邊1總數(shù)和9總數(shù)中
取小的那個(gè)就是該聯(lián)通快達(dá)到目標(biāo)狀態(tài)的最小步數(shù)
加起來(lái)就好啦
?
1 void dfs(int x, int fa, int col){ 2 vis[x] = 1; 3 if(x <= n) cnt[col]++; 4 for(int i = head[x]; i != -1; i = edge[i].next){ 5 int vv = edge[i].v; 6 if(vis[vv]) continue; 7 dfs(vv, x, col ^ 1); 8 } 9 } 染色 1 //last[i] 上一個(gè)值為i的位置 沒(méi)有為0 2 for(int i = 1; i <= (n << 1); i++) head[i] = -1; 3 for(int i = 1; i <= n; i++){ 4 int x; scanf("%d", &x); 5 if(last[x]) {add(last[x], i); add(i, last[x]);} 6 else last[x] = i; 7 } 8 for(int i = 1; i <= n; i++){ 9 int x; scanf("%d", &x); 10 add(i, i + n); add(i + n, i); 11 if(last[x]) {add(last[x], i + n); add(i + n, last[x]);} 12 else last[x] = i + n; 13 } 建邊?
轉(zhuǎn)載于:https://www.cnblogs.com/hjmmm/p/9211061.html
總結(jié)
以上是生活随笔為你收集整理的【POI每日题解 #5】 DWU-Double-row的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 爬虫day3,通过爬虫有道翻译实现汉译英
- 下一篇: hiho 挑战赛16 A.王胖浩与三角形