青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

RQNOJ P89,DLX重復覆蓋……終于AC了

Posted on 2011-04-12 22:27 Mato_No1 閱讀(785) 評論(0)  編輯 收藏 引用 所屬分類: 搜索

放了快2個月了……(準確來說放了2年了,本沙茶從2年前就開始捉這道猥瑣題……)
DLX重復覆蓋的幾點說明:
(1)必須有啟發函數優化,否則TLE;
(2)不需要二分下界,只要將目前f值(f=g+h,即實際深度加上啟發函數值)與目前求得的最優解比較即可,f>=最優解即剪枝;
(3)刪一整列(delcol)操作時,可以從任意一個結點開始刪(不一定要向精確覆蓋那樣非要從列頭開始),但是,開始的那個結點不刪!恢復(resucol)時也不恢復開始的那個結點!這是為了在接下來的橫向遍歷中不受影響。由于不刪開始結點,所以在將最優列刪除時,需要循環一次刪除一次,恢復一次。

代碼:(RQNOJ P89)

#include <iostream>
#include 
<stdio.h>
using namespace std;
#define re(i, n) for (int i=0; i<n; i++)
#define re1(i, n) for (int i=1; i<=n; i++)
#define re3(i, l, r) for (int i=l; i<=r; i++)
const int MAXN = 61, MAXM = 61, INF = ~0U >> 2;
struct DLnode {
    
int r, c, U, D, L, R;
} d[MAXN 
* MAXM];
int n, m, nodes, rowh[MAXN], cols[MAXM], res = INF;
void init_d()
{
    re3(i, 
0, m) {
        d[i].r 
= 0; d[i].c = 0; d[i].U = d[i].D = i; d[i].L = i - 1; d[i].R = i + 1;
    }
    d[
0].L = m; d[m].R = 0;
    memset(rowh, 
0, n + 1 << 2); memset(cols, 0, m + 1 << 2); nodes = m + 1;
}
void add_node(int r, int c)
{
    d[nodes].r 
= r; d[nodes].c = c; d[nodes].U = d[c].U; d[nodes].D = c; d[c].U = nodes; d[d[nodes].U].D = nodes;
    
int rh = rowh[r];
    
if (rh) {
        d[nodes].L 
= d[rh].L; d[nodes].R = rh; d[rh].L = nodes; d[d[nodes].L].R = nodes;
    } 
else d[nodes].L = d[nodes].R = rowh[r] = nodes;
    cols[c]
++; nodes++;
}
void init()
{
    scanf(
"%d%d"&m, &n);
    init_d();
    
int k, x;
    re1(i, n) {
        scanf(
"%d"&k);
        re(j, k) {
            scanf(
"%d"&x); add_node(i, x);
        }
    }
}
void delUD(int x)
{
    d[d[x].U].D 
= d[x].D; d[d[x].D].U = d[x].U;
}
void resuUD(int x)
{
    d[d[x].U].D 
= d[d[x].D].U = x;
}
void delLR(int x)
{
    d[d[x].L].R 
= d[x].R; d[d[x].R].L = d[x].L;
}
void resuLR(int x)
{
    d[d[x].L].R 
= d[d[x].R].L = x;
}
void delcol(int c)
{
    
for (int i=d[c].D; i != c; i = d[i].D) delLR(i);
}
void resucol(int c)
{
    
for (int i=d[c].U; i != c; i = d[i].U) resuLR(i);
}
int h()
{
    
bool vst[MAXM]; memset(vst, 0, m + 1);
    
int z = 0;
    
for (int i=d[0].R; i; i = d[i].R) if (!vst[i]) {
        vst[i] 
= 1; z++;
        
for (int j=d[i].D; j != i; j = d[j].D) for (int k=d[j].R; k != j; k = d[k].R) vst[d[k].c] = 1;
    }
    
return z;
}
void dfs(int v)
{
    
if (v + h() >= res) return;
    
if (!d[0].R) {res = v; return;}
    
int min = INF, x;
    
for (int i=d[0].R; i; i = d[i].R) if (cols[i] < min) {min = cols[i]; x = i;}
    
for (int i=d[x].D; i != x; i = d[i].D) {
        delcol(i);
        
for (int j=d[i].R; j != i; j = d[j].R) delcol(j);
        dfs(v 
+ 1);
        
for (int j=d[i].L; j != i; j = d[j].L) resucol(j);
        resucol(i);
    }
}
void pri()
{
    printf(
"%d\n", res);
}
int main()
{
    init();
    dfs(
0);
     pri();
    
return 0;
}

總結:DLX精確覆蓋和重復覆蓋其實是有大用的,很多搜索問題都可以轉化為這兩種問題,效率奇高無比,且寫起來也很容易(只是在建模的時候可能有點猥瑣,下面的模板,和網絡流一樣,10min的事),至于NOIP2009引出的數獨系列問題,精確覆蓋可以直接秒殺。
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品jizz在线观看美国 | 香蕉久久夜色精品国产| 午夜一级久久| 国产精品国产自产拍高清av| 亚洲激情电影在线| 欧美在线免费看| 亚洲国产成人不卡| 亚洲欧美激情四射在线日| 欧美日韩精品免费观看视频| 一区二区亚洲精品国产| 欧美一级视频| 欧美在线观看视频一区二区| 欧美一区二区三区视频在线观看| 亚洲黄色大片| 免费成人小视频| 亚洲国产精品视频| 亚洲大胆美女视频| 欧美成人久久| 亚洲伦理中文字幕| 亚洲精品一区二区三区婷婷月 | 一区二区三区你懂的| 欧美护士18xxxxhd| 一区二区三区免费网站| 亚洲看片一区| 国产精品日韩欧美| 久久久久久国产精品mv| 午夜精品影院在线观看| 国产亚洲一区在线| 美日韩精品视频免费看| 久久日韩粉嫩一区二区三区| 亚洲第一页自拍| 91久久亚洲| 国产精品久久九九| 久久免费视频在线| 欧美激情女人20p| 亚洲一区二区三区高清不卡| 亚洲欧美国产高清va在线播| 黄色成人精品网站| 日韩午夜电影| 国产视频在线一区二区| 男同欧美伦乱| 欧美日韩影院| 久久一二三四| 欧美裸体一区二区三区| 欧美一区日韩一区| 蜜桃伊人久久| 欧美一区二区高清| 欧美xxx在线观看| 欧美一区二区| 欧美成人一品| 久久精品女人| 欧美日韩色婷婷| 久久这里只有| 国产精品高潮久久| 亚洲国产精品国自产拍av秋霞 | 亚洲一区二区三区高清 | 亚洲欧美日韩在线播放| 亚洲国产成人精品女人久久久| 国产日韩亚洲欧美| 久久夜色精品国产亚洲aⅴ| 欧美精品日韩www.p站| 欧美综合二区| 欧美午夜精品| 亚洲国产精品成人一区二区| 国产精品一区二区三区乱码| 欧美1区2区3区| 女女同性精品视频| 国产精品美女在线| 亚洲国产mv| 噜噜噜久久亚洲精品国产品小说| 久久国产精品99精品国产| 亚洲美女在线视频| 欧美在线日韩| 亚洲桃花岛网站| 国产欧美一区二区精品仙草咪| 亚洲精品一区二区在线| 亚洲另类春色国产| 国产视频一区二区在线观看 | 久久精品久久99精品久久| 亚洲尤物在线视频观看| 曰韩精品一区二区| 亚洲女人小视频在线观看| 亚洲三级视频在线观看| 久久精选视频| 久久精品视频亚洲| 国产精品日日摸夜夜摸av| 亚洲精品日韩久久| 另类综合日韩欧美亚洲| 亚洲免费视频观看| 欧美日韩精品一区二区天天拍小说 | 正在播放欧美视频| 免费日韩视频| 欧美成人免费全部| 欧美久久婷婷综合色| 国产亚洲一区精品| 一区二区三区国产盗摄| 欧美三级黄美女| 亚洲免费成人av| 亚洲免费观看在线观看| 欧美成人免费小视频| 欧美激情综合色| 亚洲国产综合在线| 美日韩精品视频免费看| 一本久久综合| 欧美一区二区三区四区高清| 国产一区二区三区在线观看视频| 国产综合久久久久影院| 国产精品盗摄一区二区三区| 欧美在线关看| 欧美一区影院| 欧美淫片网站| 亚洲午夜黄色| 欧美一区二区大片| 最新国产成人在线观看| 夜夜爽99久久国产综合精品女不卡| 亚洲欧美一区二区三区久久| 亚洲一区国产视频| 欧美在线地址| 久久精品国产综合| 亚洲人成绝费网站色www| 午夜亚洲性色视频| 免费不卡在线观看| 亚洲国产成人精品久久久国产成人一区 | 99av国产精品欲麻豆| 中日韩在线视频| 国产精品激情av在线播放| 亚洲专区在线视频| 久久免费精品日本久久中文字幕| 一区精品在线| 欧美国产精品v| 亚洲无限av看| 免费日韩精品中文字幕视频在线| 亚洲成人在线视频播放| 欧美激情精品久久久久久| 亚洲性视频h| 欧美freesex8一10精品| 亚洲性感美女99在线| 国产午夜精品在线观看| 欧美14一18处毛片| 亚洲一级黄色| 欧美国产日本韩| 欧美一级午夜免费电影| 亚洲国产高清在线| 国产精品国产三级国产| 蜜桃av噜噜一区| 一区二区三区高清在线观看| 欧美大片免费久久精品三p| 亚洲香蕉网站| 亚洲国产日韩一区| 国产精品毛片高清在线完整版| 久久久999国产| 一区二区三区成人精品| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲一区二区黄| 91久久综合| 国产日韩在线亚洲字幕中文| 欧美日韩国产页| 久久深夜福利免费观看| 亚洲欧美一区二区原创| 亚洲欧洲一区二区三区| 久久久久高清| 欧美一区二区网站| 一区二区91| 亚洲精品视频免费在线观看| 国产亚洲欧美aaaa| 欧美视频三区在线播放| 欧美sm视频| 蜜桃久久av一区| 久久久久中文| 久久精品国产精品亚洲精品| 一区二区三区欧美成人| 亚洲精品久久久久久一区二区| 欧美国产在线观看| 免费成人美女女| 伊人一区二区三区久久精品| 免费亚洲一区二区| 欧美日韩中文字幕精品| 在线亚洲免费| 国产精品草草| 欧美与欧洲交xxxx免费观看 | 韩日欧美一区二区三区| 欧美亚洲一区三区| 欧美韩日一区二区| 亚洲欧美日韩综合国产aⅴ| 国产一区二区三区网站 | 久久一区欧美| 中国日韩欧美久久久久久久久| 久久国产精品一区二区三区| 亚洲成在线观看| 国产精品久久久久久久久久久久久久| 午夜视黄欧洲亚洲| 91久久精品久久国产性色也91| 午夜精品久久久久久久99黑人| 韩日视频一区| 国产欧美日韩一区| 欧美日韩亚洲激情| 老色批av在线精品| 欧美一级精品大片| 国产精品99久久久久久久女警 | 鲁大师成人一区二区三区|