POJ 1637(最大流)混合尤拉迴路

2022-05-24 04:12:10 字數 2229 閱讀 1832

1 定義

尤拉通路 (euler tour)——通過圖中每條邊一次且僅一次,並且過每一頂點的通路。

尤拉迴路 (euler

circuit)——通過圖中每條邊一次且僅一次,並且過每一頂點的迴路。

尤拉圖——存在尤拉迴路的圖。

2 無向圖是否具有尤拉通路或迴路的判定

g有尤拉通路的充分必要條件為:g

連通,g中只有兩個奇度頂點(它們分別是尤拉通路的兩個端點)。

g有尤拉迴路(g為尤拉圖):g連通,g中均為偶度頂點。

3 有向圖是否具有尤拉通路或迴路的判定

d有尤拉通路:d連通,除兩個頂點外,其餘頂點的入度均等於出度,這兩個特殊的頂點中,乙個頂點的入度比出度大1,另乙個頂點的入度比出度小1。

d有尤拉迴路(d為尤拉圖):d連通,d中所有頂點的入度等於出度。

4 混合圖。混合圖也就是無向圖與有向圖的混合,即圖中的邊既有有向邊也有無向邊。

5 混合圖尤拉迴路

混合圖尤拉迴路用的是網路流。

把該圖的無向邊隨便定向,計算每個點的入度和出度。如果有某個點出入度之差為奇數,那麼肯定不存在尤拉迴路。因為尤拉迴路要求每點入度

= 出度,也就是總度數為偶數,存在奇數度點必不能有尤拉迴路。

現在每個點入度和出度之差均為偶數。將這個偶數除以2,得x。即是說,對於每乙個點,只要將x條邊反向(入》出就是變入,出》入就是變出),就能保證出

= 入。如果每個點都是出 = 入,那麼很明顯,該圖就存在尤拉迴路。

現在的問題就變成了:該改變哪些邊,可以讓每個點出 =

入?構造網路流模型。有向邊不能改變方向,直接刪掉。開始已定向的無向邊,定的是什麼向,就把網路構建成什麼樣,邊長容量上限1。另新建s和t。對於入 >

出的點u,連線邊(u, t)、容量為x,對於出 > 入的點v,連線邊(s,

v),容量為x(注意對不同的點x不同。當初由於不小心,在這裡錯了好幾次)。之後,察看是否有滿流的分配。有就是能有尤拉迴路,沒有就是沒有。檢視流值分配,將所有流量非

0(上限是1,流值不是0就是1)的邊反向,就能得到每點入度 = 出度的尤拉圖。

由於是滿流,所以每個入 >

出的點,都有x條邊進來,將這些進來的邊反向,ok,入 = 出了。對於出 > 入的點亦然。那麼,沒和s、t連線的點怎麼辦?和s連線的條件是出 >

入,和t連線的條件是入 > 出,那麼這個既沒和s也沒和t連線的點,自然早在開始就已經滿足入 =

出了。那麼在網路流過程中,這些點屬於「中間點」。我們知道中間點流量不允許有累積的,這樣,進去多少就出來多少,反向之後,自然仍保持平衡。

以上內容**:

其實還可以再深入一步:求出尤拉迴路的路徑

只要將殘餘網路中的滿流邊(不包括以s,t為端點的邊)與一開始設定的方向反向即可,最後求一遍有向圖的尤拉迴路(dfs)即可~

ps:求混合圖的尤拉路徑也應該可以用網路流做吧。。按照定義做應該是可以的~不過好像沒有這個題,我是沒找到~

view code

#include #include 

#include

#include

#include

#include

#define n 500

#define m 20000

#define inf 1e9

using

namespace

std;

inthead[n],to[m],next[m],len[m];

int q[m*10

],layer[n];

intpin[n],pout[n];

intn,m,s,t,cas,cnt,sum;

inline

void add(int u,int v,int

w)inline

bool

read()

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

return

true;}

inline

bool

bfs()

}return layer[t]!=-1;}

inline

int find(int u,int

cur_flow)

if(!res) layer[u]=-1

;

return

res;

}inline

void

go()

intmain()

return0;

}

UVA 10735 最大流 混合尤拉迴路 輸出路徑

分類 uva la 圖論 2013 07 21 11 13 125人閱讀收藏 舉報題意 給你乙個圖,有n個點,m條邊,有單向邊和雙向邊 讓你是否存在尤拉迴路,有就輸出路徑 1.判斷是否有尤拉迴路 可以用最大流來判斷 首先,我們從結論出發 存在尤拉迴路的充要條件是 每個點的入度等於出度。先把所用無向邊...

POJ1149 養豬(最大流)

題目描述 尼克在一家養豬場工作,這家養豬場共有m間鎖起來的豬舍,由於豬舍的鑰匙都給了客戶,所以尼克沒有辦法開啟這些豬舍,客戶們從早上開始乙個接乙個來購買生豬,他們到達後首先用手中的鑰匙開啟他所能開啟的全部豬舍,然後從中選取他要買的生豬,尼克可以在此期間將開啟的豬舍中的豬調整到其它開著的豬舍中,每個豬...

POJ 1273 樸素的最大流

poj 1273 ditch mike w 2011 10 5 今天我才發現,我對殘餘網路理解有誤!include include include include ifndef true define true 1 endif define size 222 define qsize 2 size ...