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

考慮這樣一種網絡流問題:需要對同一個圖求多次最大流。則在每次求最大流之前,需要將所有邊的容量全部恢復到初始值(求最大流的過程中,邊的容量f值被改變了)。不過這還不算最猥瑣的,有的時候,我們需要在每次求最大流之前都刪去圖中的一些點或一些邊,或者改變某些原有的邊的容量,特別是需要刪點或刪邊的情況爆難搞。因為,一般的邊表中邊類型定義如下:
struct edge {
        
int a, b, f, next;
} ed[MAXM 
+ MAXM];
表示這條邊起點為a,終點為b,容量為f,鄰接邊(就是下一條起點為a的邊)的編號為next。
如果要求多次最大流,那么在每次求最大流之前就要把所有邊的容量恢復到初始值,解決方法是引入一個“初始容量”域fs,在這條邊剛剛被加入的時候將它的fs值和f值都設為初始給它的容量,在恢復時,只要將所有邊的f值恢復到fs即可。若要改變邊容量,則將該邊的fs值和f值都設為改變后的容量即可。

下面來分析需要刪邊或刪點的情況。在這種情況下,如果采用只有next的單向鏈表,則刪除時next域極難處理,而且,在一般的邊表中,還設立了表頭hd,hd[a]表示邊表中起點為a的第一條邊的編號。因此,若刪除的邊<a, b, f>是起點為a的第一條邊,還會影響hd[a]的值,使情況變得更為復雜。因此,必須采用雙向鏈表!還記得Dancing Link么?邊表其實也可以搞成Dancing Link,方法如下:
設圖中有N個點,M條邊(注意,這M條邊只包括正向邊,不包括反向邊。由于每條正向邊<a, b, f>都對應一條反向邊<b, a, 0>,因此邊表中邊的數目其實是M+M)。首先把邊表ed的0~N這(N+1)個位置(下標)空出來,作表頭(表頭不是邊,因此在遍歷邊的時候不會遍歷到它們)。其中,ed[0]為總表頭,用于遍歷ed[1..N]中每個未被刪去的點;ed[1..N]為單點表頭,ed[i]用來遍歷圖中所有以i為起點的邊(和DLX中的二維DL驚人相似)。然后,若N為偶數,則空一個位置(也就是將ed[N+1]丟棄不用),這是因為我們在增廣過程中需要引用到一條邊對應的逆向邊(正向邊對應反向邊,反向邊對應正向邊),一般認為編號為p的邊對應的逆向邊是p ^ 1,這樣,就要求圖中所有正向邊的編號都是偶數,所有反向邊的編號都是奇數(否則會造成混亂)。因此當N為偶數時,(N+1)為奇數,不能放置第一條正向邊,需要從ed[N+2]開始放置正向邊。若N為奇數則不用空位。
接下來就是邊類型了。在這里,邊類型一共需要包括6個域:a, b, fs, f, pre, next,表示這條邊起點為a,終點為b,初始容量為fs,當前容量為f,上一條起點為a的邊編號為pre,下一條起點為a的邊編號為next。注意,和DL一樣,整個鏈表是循環的,也就是我們認為表中最后一條起點為a的邊的下一條鄰接邊編號就是a(表頭),同樣,a的上一條鄰接邊也就是這條邊。
struct edge {
    
int a, b, fs, f, pre, next;
} ed[MAXM 
+ MAXM];
接下來就是幾個重要過程了。
(1)初始化表頭:
void init_d()
{
    re1(i, n) {ed[i].a 
= i; ed[i].b = -1; ed[i].f = 0; ed[i].pre = ed[i].next = i;}
    
if (n % 2) m = n + 1else m = n + 2;
}
這里n是圖中的點數(相當于N),m是邊的編號指針(相當于DLX中的nodes)
(2)添加新邊:
void add_edge(int a, int b, int f)
{
    ed[m].a 
= a; ed[m].b = b; ed[m].fs = ed[m].f = f; ed[m].pre = ed[a].pre; ed[m].next = a; ed[a].pre = m; ed[ed[m].pre].next = m++;
    ed[m].a 
= b; ed[m].b = a; ed[m].fs = ed[m].f = 0; ed[m].pre = ed[b].pre; ed[m].next = b; ed[b].pre = m; ed[ed[m].pre].next = m++;
}
這個和DLX類似,不解釋了囧……

最后進入最核心的部分——到底如何處理刪邊或刪點?有了DL型邊表就爆好搞了:刪去一條邊,只要直接刪去該邊在DL中的位置即可:
void deledge(int No)
{
    ed[ed[No].pre].next 
= ed[No].next; ed[ed[No].next].pre = ed[No].pre;
}
恢復一條已刪去的邊:
void resuedge(int No)
{
    ed[ed[No].pre].next 
= ed[ed[No].next].pre = No;
}
需要刪點的情況類似,對單點表頭處理即可。

【具體題目】PKU1815
這題就是求有向圖的字典序最小的最小點割集問題,方法是先求出最小點連通度(有關最小點連通度的求法見圖的連通度問題的求法),然后按編號遞增順序枚舉每個點,若刪去該點(其實是刪去建成的新圖中該點i'到該點附加點i''之間的邊)后圖的最小點連通度減小,則應刪去該點,否則不應刪去該點。刪去后,繼續枚舉下一個點,直到求出點割集為止。
注意,本題只有刪邊,沒有刪點,因此總表頭可以不需要,直接從ed[0]開始作單點表頭。此時,關于是否空位就剛好反過來了:如果N是奇數就要空位,N是偶數不空位(不過這題里由于建出的網絡流圖中有2*N0個結點,總是偶數,可以不管,不過本沙茶還是管這個了)。

代碼(神犇不要鄙視):
#include <iostream>
#include 
<stdio.h>
using namespace std;
#define re(i, n) for (int i=0; i<n; i++)
const int MAXN = 501, MAXM = 100000, INF = ~0U >> 2;
struct edge {
    
int a, b, fs, f, pre, next;
} ed[MAXM 
+ MAXM];
int n0, n, m = 0, s, t, start[MAXN], pr[MAXN], hs[MAXN], lev[MAXN], q[MAXN], now, flow, reslen = 0, res[MAXN];
bool vst[MAXN];
void init_d()
{
    re(i, n) {ed[i].a 
= i; ed[i].b = -1; ed[i].f = 0; ed[i].pre = ed[i].next = i;}
    
if (n % 2) m = n + 1else m = n;
}
void add_edge(int a, int b, int f)
{
    ed[m].a 
= a; ed[m].b = b; ed[m].fs = ed[m].f = f; ed[m].pre = ed[a].pre; ed[m].next = a; ed[a].pre = m; ed[ed[m].pre].next = m++;
    ed[m].a 
= b; ed[m].b = a; ed[m].fs = ed[m].f = 0; ed[m].pre = ed[b].pre; ed[m].next = b; ed[b].pre = m; ed[ed[m].pre].next = m++;
}
void init()
{
    
int x;
    scanf(
"%d%d%d"&n0, &s, &t);
    n 
= n0 << 1; s--; t += n0 - 1; init_d();
    re(i, n0) re(j, n0) {
        scanf(
"%d"&x);
        
if (i == j) {
            
if (i == s || i == t - n0) add_edge(i, i + n0, INF); else add_edge(i, i + n0, 1);
        } 
else if (x) add_edge(i + n0, j, INF);
    }
}
void aug()
{
    
int z = hs[t], i = t, p; flow += z;
    
while (i != s) {
        hs[i] 
-= z; p = pr[i]; ed[p].f -= z; ed[p ^ 1].f += z; i = ed[p].a;
        
if (!ed[p].f) now = i;
    }
}
bool dfs()
{
    re(i, n) vst[i] 
= 0; vst[s] = 1; q[0= s; lev[s] = 0;
    
int i, j, f0;
    
for (int front=0, rear=0; front<=rear; front++) {
        i 
= q[front];
        
for (int p=ed[i].next; p != i; p=ed[p].next) if (ed[p].f) {
            j 
= ed[p].b;
            
if (!vst[j]) {vst[j] = 1; q[++rear] = j; lev[j] = lev[i] + 1;}
        }
    }
    
if (!vst[t]) return 0;
    now 
= s; re(i, n) {start[i] = ed[i].next; vst[i] = 0;} hs[now] = INF;
    
bool fd;
    
while (!vst[s]) {
        
if (now == t) aug();
        fd 
= 0;
        
for (int p=start[now]; p != now; p=ed[p].next) {
            j 
= ed[p].b; f0 = ed[p].f;
            
if (lev[now] + 1 == lev[j] && !vst[j] && f0) {
                fd 
= 1; start[now] = pr[j] = p; hs[j] = hs[now] <= f0 ? hs[now] : f0; now = j; break;
            }
        }
        
if (!fd) {
            vst[now] 
= 1;
            
if (now != s) now = ed[pr[now]].a;
        }
    }
    
return 1;
}
void deledge(int No)
{
    ed[ed[No].pre].next 
= ed[No].next; ed[ed[No].next].pre = ed[No].pre;
}
void resuedge(int No)
{
    ed[ed[No].pre].next 
= ed[ed[No].next].pre = No;
}
void resu_all()
{
    re(i, n) 
for (int p=ed[i].next; p != i; p=ed[p].next) ed[p].f = ed[p].fs;
}
void solve()
{
    flow 
= 0while (dfs()) ; int f_ = flow;
    
if (!flow) {reslen = -1return;}
    re(i, m) 
if (ed[i].a + n0 == ed[i].b && ed[i].a != s && ed[i].b != t) {
        deledge(i); deledge(i 
^ 1); resu_all();
        flow 
= 0while (dfs()) ;
        
if (flow < f_) {res[reslen++= ed[i].a + 1; f_--;} else {resuedge(i ^ 1); resuedge(i);}
    }
}
void pri()
{
    
if (reslen == -1) puts("0"); else if (reslen) {
        printf(
"%d\n", reslen);
        re(i, reslen 
- 1) printf("%d ", res[i]); printf("%d\n", res[reslen - 1]);
    } 
else puts("NO ANSWER!");
}
int main()
{
    init();
    solve();
    pri();
    
return 0;
}

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲综合日韩在线| 亚洲欧美综合国产精品一区| 亚洲精品国产视频| 一色屋精品视频在线看| 国产精品尤物| 欧美三级乱码| 欧美日韩在线一二三| 欧美日韩国产区| 欧美日韩精品伦理作品在线免费观看| 欧美日韩精品一区二区三区四区 | 中文无字幕一区二区三区| 美女黄毛**国产精品啪啪 | 美女视频黄免费的久久| 久久天天躁狠狠躁夜夜爽蜜月| 欧美在线免费视频| 欧美+亚洲+精品+三区| 亚洲第一精品夜夜躁人人躁| 久久久999精品免费| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美激情第一页xxx| 99www免费人成精品| 亚洲欧美国产不卡| 久久久久久9999| 欧美激情网友自拍| 99在线|亚洲一区二区| 亚洲欧美日韩视频二区| 免费成人av在线看| 国产精品久久一卡二卡| 国内揄拍国内精品久久| 亚洲精品久久久久久久久久久久| 午夜久久久久久| 欧美不卡视频一区发布| 在线亚洲电影| 欧美风情在线观看| 国产一级揄自揄精品视频| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲性视频网址| 亚洲国产日韩一级| 欧美一区二区高清在线观看| 欧美电影打屁股sp| 国产在线精品成人一区二区三区 | 亚洲福利电影| 亚洲免费视频网站| 欧美日韩精品综合在线| 在线日韩欧美视频| 欧美资源在线| 一本色道久久综合| 欧美精品一区二区精品网| 国产人久久人人人人爽| aa亚洲婷婷| 亚洲国产婷婷| 美女精品网站| 亚洲成人资源| 久久久久久婷| 久久久久在线观看| 国产自产在线视频一区| 午夜伦欧美伦电影理论片| 99ri日韩精品视频| 欧美三级电影网| 这里是久久伊人| 亚洲激情第一区| 免费成人毛片| 亚洲男女自偷自拍| 欧美肥婆bbw| 久久精品国产亚洲aⅴ| 国产欧美不卡| 欧美在线免费一级片| 亚洲午夜激情| 欧美亚韩一区| 欧美在线观看视频在线| 亚洲午夜av电影| 国产精品久久一区二区三区| 亚洲一区二区三区影院| 一区二区三区回区在观看免费视频| 欧美国产精品久久| 日韩视频亚洲视频| 亚洲日韩成人| 欧美日本精品| 夜夜精品视频一区二区| 亚洲无限av看| 激情丁香综合| 欧美电影打屁股sp| 久久国产视频网站| 在线播放国产一区中文字幕剧情欧美| 亚洲欧美日韩在线不卡| 国产欧美日韩免费| 久久亚洲二区| 免费日韩av片| 亚洲蜜桃精久久久久久久| 亚洲福利视频专区| 欧美午夜免费| 久久精品免视看| 欧美福利一区二区| 香蕉久久一区二区不卡无毒影院| 亚洲欧美日本日韩| 国产伦精品一区二区三区照片91 | 欧美日本在线播放| 亚洲欧美日韩综合aⅴ视频| 亚洲天堂男人| 雨宫琴音一区二区在线| 夜夜嗨av色一区二区不卡| 国产一区亚洲| 一区二区三区毛片| 1024精品一区二区三区| av成人免费在线观看| 激情五月***国产精品| 日韩网站在线观看| 在线成人www免费观看视频| 一卡二卡3卡四卡高清精品视频| 黄色成人小视频| 亚洲自拍都市欧美小说| 一区二区三区视频在线| 久热爱精品视频线路一| 亚洲欧美制服另类日韩| 欧美成人a视频| 六月婷婷一区| 国产一区二区| 亚洲欧美999| 亚洲性色视频| 欧美另类极品videosbest最新版本 | 欧美91福利在线观看| 欧美韩国一区| 久久久www成人免费精品| 欧美精品一区在线播放| 久久久久久久久蜜桃| 欧美日韩精品久久久| 亚洲电影自拍| 在线国产精品播放| 欧美专区一区二区三区| 午夜在线a亚洲v天堂网2018| 欧美精品福利在线| 欧美大片专区| 亚洲韩国青草视频| 久久躁狠狠躁夜夜爽| 午夜久久久久久| 国产精品免费一区二区三区观看| 亚洲免费成人av| 一区二区精品在线| 欧美日韩一区二区三| 一本色道久久综合狠狠躁篇怎么玩| av72成人在线| 国产精品久久久久久久电影| 亚洲人成网站在线播| 亚洲毛片av| 欧美午夜精品| 亚洲免费在线观看| 欧美日韩综合精品| 一区二区三区精品视频在线观看| 亚洲主播在线观看| 欧美午夜精品一区| 亚洲欧美一区二区三区极速播放 | 亚洲图片欧美日产| 亚洲在线中文字幕| 欧美日韩网址| 9l视频自拍蝌蚪9l视频成人| 亚洲永久网站| 久久婷婷国产综合国色天香| 国产亚洲欧美中文| 夜夜嗨av一区二区三区四区| 亚洲影视九九影院在线观看| av不卡在线| 久久精品99| 1000部精品久久久久久久久| 午夜视频精品| 亚洲国产99| 欧美激情中文字幕一区二区| 亚洲另类黄色| 久久国产精品久久久久久久久久| 欧美韩日高清| 欧美一区二区在线视频| 一区二区亚洲| 欧美日韩一区二区高清| 欧美与黑人午夜性猛交久久久| 亚洲在线观看| 亚洲国产99精品国自产| 久久综合五月天婷婷伊人| 韩国一区二区在线观看| 欧美精品在线免费观看| 国产在线精品一区二区夜色| 久久中文精品| 99精品视频免费观看视频| 久久深夜福利免费观看| 亚洲视频免费| 亚洲午夜视频在线| 亚洲电影成人| 欧美日韩免费观看一区三区| 欧美尤物巨大精品爽| 亚洲激情影院| 一本色道久久综合亚洲91| 国产性做久久久久久| 亚洲精品中文字幕在线观看| 麻豆成人综合网| 午夜精彩视频在线观看不卡| 国产视频久久久久久久| 国产精品国产亚洲精品看不卡15 | 中文亚洲视频在线| 亚洲网站啪啪| 亚洲精品极品| 亚洲第一黄网| 欧美三级在线播放|