給定有向圖 g=(
v,e)
g=(v,e)
g=(v,e
)。設 p
pp 是 g
gg 的乙個簡單路(頂點不相交)的集合。如果 v
vv 中每個頂點恰好在 p
pp 的一條路上,則稱 p
pp 是 g
gg 的乙個路徑覆蓋。p 中路徑可以從 v
vv 的任何乙個頂點開始,長度也是任意的,特別地,可以為 0
00。g
gg 的最小路徑覆蓋是 g
gg 的所含路徑條數最少的路徑覆蓋。
設計乙個有效演算法求乙個有向無環圖 g
gg 的最小路徑覆蓋。
input第 1
11 行有 2 個正整數 n
nn 和 m
mm。n
nn 是給定有向無環圖 g
gg 的頂點數,m
mm 是 g
gg 的邊數。
接下來的 m
mm 行,每行有 2
22 個正整數 u
uu 和 v
vv,表示一條有向邊 (i,
j)
(i,j)
(i,j)。
output從第 1
11 行開始,每行輸出一條路徑。
檔案的最後一行是最少路徑數。
example樣例輸入
11121
2131
4253
6475
8697
108119
1110
11
樣例輸出
147
101125
8369
3
hint1≤n
≤200,1
≤m
≤6000
1≤n≤200,1≤m≤6000
1≤n≤20
0,1≤
m≤60
00把原圖的每個點 v
vv 拆成 v
xv_x
vx和 v
yv_y
vy兩個點,如果有一條有向邊 a
aa->b
bb,那麼就加邊 a
xa_x
ax−>b
yb_y
by。這樣就得到了乙個二分圖。那麼最小路徑覆蓋=原圖的結點數−
-−新圖的最大匹配數
#include
using
namespace std;
const
int maxn=
1e4+7;
const
int maxm=
2e5+7;
const
int inf=
0x3f3f3f3f
;int n,m,u,v;
struct dinic e[maxm]
;int head[maxn]
, dep[maxn]
, tol, ans;
int cur[maxn]
;int src, sink, n;
void
add(
int u,
int v,
int f)
bool
bfs()}
}return
false;}
intdfs
(int x,
int maxx)}}
return0;
}int
dinic
(int s,
int t)
return ans;
}void
init
(int n)
} g;
int pre[maxn]
,sec[maxn]
;template
<
typename t>
inline
void
read
(t &x)
while
(isdigit
(c))
x *= p;
}template
<
typename t>
inline
void
print
(t x)
static
int cnt;
static
int a[50]
; cnt =0;
dowhile
(x);
for(
int i = cnt; i >=
1; i--
)putchar
(a[i]
+'0');
//puts("");
}int isnot_head[maxn]
,to[maxn]
;int
main()
for(
int i =
1; i <= n; i++
)for
(int i = n +
1; i <= n *
2; i++
)for
(int i =
0; i <= t; i++
) to[i]
= i;
int ans = g.
dinic
(s, t)
;for
(int i =
2; i <= g.tol; i+=2
)}for(
int i =
1; i <= n; i++
)puts(""
);}}
print
(n - ans)
;puts(""
);return0;
}
最小路徑覆蓋問題(最小路徑覆蓋)
本題題目描述可以發現很明顯的最小路徑覆蓋問題,又因為最小路徑覆蓋 節點數 二分圖最大匹配數,所以本題可以用匈牙利演算法求出二分圖最大匹配數,也可以向第一題那樣用網路流模型求出最大匹配數。本題建模時不同在於,每個點要分成兩個點,乙個為起點,乙個為終點,再來求二分圖最大匹配。然後麻煩就在於本題也要輸出路...
最小路徑覆蓋
zoj 2521 led display 題意 七段數碼顯示器,乙個數碼上的7段燈可以選擇滅掉一些後重複使用這個數碼,但滅掉的段不能再亮了。比如 6 可以 滅掉左小角的一段變成 5 來使用。但自己不能重複使用,即最少滅一段才能再次使用。現在按次序給出 乙個要現實的數碼序列,求需要的最少的燈數,使得能...
最小路徑覆蓋
差不多是模板題了 分析 最小路徑覆蓋 n 最大匹配數 n為 總點數 因為匹配的點 相互 交叉形成一條條最長路徑 剩餘沒匹配的點需要進行就是需要匹配數 及 最小路徑覆蓋數 include using namespace std define maxn 1005 int match maxn int v...