對差分約束問題的理解

來源:互聯網
上載者:User

首先討論這種標準形式的問題

X1 - X2 <= 0
X1 - X5 <= -1
X2 - X5 <= 1
X3 - X1 <= 5
X4 - X1 <= 4
X4 - X3 <= -1
X5 - X3 <= -3
X5 - X4 <= -3

上面的不等式組全都是兩個未知數的差小於等於某個常數(大於等於也可以,左右乘以-1就可以化成小於等於)。這樣的不等式組就稱作差分約束系統。

解法利用到了單源最短路徑問題中的三角形不等式。

即對於任何一條邊u -> v,都有:d(v) <= d(u) + w(u, v),其中d(u)和d(v)是從源點分別到點u和點v的最短路徑的權值,w(u, v)是邊u -> v的權值。

顯然以上不等式就是d(v) - d(u) <= w(u, v)。這個形式正好和差分約束系統中的不等式形式相同。於是我們就可以把一個差分約束系統轉化成一張圖,每個未知數Xi對應圖中的一個頂點Vi,把所有不等式都化成圖中的一條邊。對於不等式Xi - Xj <= c,把它化成三角形不等式:Xi <= Xj + c,就可以化成邊Vj -> Vi,權值為c。最後,我們在這張圖上求一次單源最短路徑,這些三角形不等式就會全部都滿足了,因為它是最短路徑問題的基本性質嘛。

實際求解過程中,我們初始化所有的d數組為0,然後根據連邊情況跑spfa即可,最後得到的d數組就是最小值。當然如果出現負環,那表示某幾個不等式互相矛盾。

比如UVA 11478

bool spfa(int mid){    queue<int>q;    int i,j;    for(i=1;i<=n;i++){        dis[i]=0;   //這裡初始化為0隻去搜負環        vis[i]=1;        tim[i]=1;        q.push(i);    }    while(!q.empty()){        int u=q.front();        q.pop();        vis[u]=0;        for(i=head[u];i!=-1;i=edge[i].next){            int v=edge[i].v;            if(dis[v]>dis[u]+edge[i].w-mid){                dis[v]=dis[u]-mid+edge[i].w;                if(!vis[v]){                    vis[v]=1;                    q.push(v);                    if(++tim[v]>n) return 0;                }            }        }    }    return 1;}

當然還有對稱的一種情況,就是不等式組都是>=方向,這個相當與最長路徑的定義,d(v) >= d(u) + w(u, v).

實際求解過程中,我們依然初始化所有的d數組為0,然後根據連邊情況跑spfa即可,最後得到的d數組就是最大值。如果出現正環同理表明出現矛盾

總結下來就是這麼個結論:

如果是求最值

求最大值,把不等式全變為<=,做最短路;
求最小值,把不等式全變為>=,做最長路。
如果只是判斷是否有解,則可統一為建好圖用spfa判負環即可

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.