網路流二十四題之P2764 最小路徑覆蓋問題

2022-05-03 14:12:14 字數 2815 閱讀 6894

給定有向圖 g=(v,e)g=(v,e) 。設 pp 是 gg 的乙個簡單路(頂點不相交)的集合。如果 vv 中每個定點恰好在pp的一條路上,則稱 pp 是 gg 的乙個路徑覆蓋。pp中路徑可以從 vv 的任何乙個定點開始,長度也是任意的,特別地,可以為 00 。gg 的最小路徑覆蓋是 gg 所含路徑條數最少的路徑覆蓋。設計乙個有效演算法求乙個 gap (有向無環圖) gg 的最小路徑覆蓋。

v_1=\\cup\v1​=∪

e_1=\\cup\\cup\e1​=∪∪

每條邊的容量均為 11 ,求網路 g_1g1​的 (x_0,y_0)(x0​,y0​) 最大流。

輸入格式:

第一行有 22 個正整數 nn 和 mm 。 nn 是給定\textgap(有向無環圖) gg 的頂點數, mm 是 gg 的邊數。接下來的 mm行,每行有兩個正整數 ii 和 jj 表示一條有向邊 (i,j)(i,j)。

輸出格式:

從第1 行開始,每行輸出一條路徑。檔案的最後一行是最少路徑數。

輸入樣例#1: 複製

11 12

1 21 3

1 42 5

3 64 7

5 86 9

7 10

8 11

9 11

10 11

輸出樣例#1: 複製

1 4 7 10 11

2 5 8

3 6 9

3

1\leq n\leq 150,1\leq m\leq 60001≤n≤150,1≤m≤6000

由@flierking提供spj

這個題目有點難讀,我讀了挺久的,這個題目是讓你找最少的路徑使得所有的路徑合在一起可以覆蓋了整個圖。

沒有最少自然可以是n,就是所有點自成一條路徑。

拆分題目有點難寫,我開始根本就沒有什麼思路,後來看到二分圖匹配有乙個關於這個的定理,

dag圖的最小路徑覆蓋數 = 節點數 - 二分圖的最大匹配

所以這個就可以求解,然後這個轉化成二分圖,就需要把乙個點拆成兩個點,然後再合併。

說多了也沒用,自己看**理解吧。

我開始看題解,以為只能用鏈式前向星建圖,真的要哭了,不太會用,後來發現也可以用vector

#include #include 

#include

#include

#include

#include

#include

#define inf 0x3f3f3f3f

using

namespace

std;

const

int maxn = 10050

;int

level[maxn], iter[maxn];

inthead[maxn];

int n,m,s = 0, t = 0

;struct

node

exa[maxn

<<1

];int cnt = 1

;void add(int u,int v,int

c)void bfs(int

s) }

}}int

tag[maxn], to[maxn];

int dfs(int u,int v,int

f) }

}return0;

}void

init()

int dinic(int s,int

t)

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

printf("\n

");}

}return

flow;

}int

main()

int ans =dinic(s, t);

printf(

"%d\n

",n -ans);

return0;

}

#include #include 

#include

#include

#include

#include

#include

#define inf 0x3f3f3f3f

using

namespace

std;

const

int maxn = 10050

;int

level[maxn], iter[maxn];

int n,m,s = 0, t = 0

;struct

node

};vector

e;vector

g[maxn];

void add(int u,int v,int

c)void bfs(int

s) }

}}int

tag[maxn], to[maxn];

int dfs(int u,int v,int

f) }

}return0;

}void

init()

int dinic(int s,int

t)

//cout << endl;

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

printf("\n

");}

}return

flow;

}int

main()

int ans =dinic(s, t);

printf(

"%d\n

",n -ans);

return0;

}

網路流二十四題

開始了我的網路流 24 題之旅,寫在一起到時候方便一起複習哦。其實這並不是真的二十四題,有一些過於水的我就不寫上來了。然後有的 太水了就不寫了。感覺這些題目還是比較基礎的,方法卻值得借鑑!剩餘題目 航空路線問題 火星探險問題以下 題目描述 點此看題 解法 你發現時間是最大的障礙,因為對於不同的時間飛...

P2764 最小路徑覆蓋問題(網路流)

給定有向圖g v,e g v,e 設p p 是g role presentation style position relative g g的乙個簡單路 頂點不相交 的集合。如果 v v 中每個頂點恰好在 p role presentation style position relative p p...

P2764 最小路徑覆蓋問題 網路流 題之一

問題描述 每條邊的容量均為1。求網路g1的 0 x 0 y 最大流。程式設計任務 對於給定的給定有向無環圖g,程式設計找出g的乙個最小路徑覆蓋。輸入格式 件第1 行有2個正整數n和m。n是給定有向無環圖g 的頂點數,m是g 的邊數。接下來的m行,每行有2 個正整數i和j,表示一條有向邊 i,j 輸出...