最小路徑覆蓋問題(最小路徑覆蓋)

2021-06-27 04:38:47 字數 847 閱讀 5431

本題題目描述可以發現很明顯的最小路徑覆蓋問題,又因為最小路徑覆蓋=節點數-二分圖最大匹配數,所以本題可以用匈牙利演算法求出二分圖最大匹配數,也可以向第一題那樣用網路流模型求出最大匹配數。本題建模時不同在於,每個點要分成兩個點,乙個為起點,乙個為終點,再來求二分圖最大匹配。

然後麻煩就在於本題也要輸出路徑,所以再寫乙個dfs函式。從建的起點開始,每次如果可以向後面走,並且流量為0,說明有路徑,就可以繼續找,注意此時每次dfs找到的是終點邊,因為每次dfs要從起點開始,所以重新dfs時要從找到的點-n的點開始dfs,用乙個佇列記下找到的點的順序,最後for迴圈輸出就行。

**如下:

#include #include #include #include #include #include #include #include #include #include #define m 211*211

#define inf 0x7fffffff

#define st 1000

#define ed 2000

using namespace std;

int n,m;

int num=0;

int p[m];

int q[4*m];

int level[m];

struct node

str1[m];

void add(int x,int y,int z)

void init()

}bool makelevel(int st,int ed)

}int main()

printf("%d\n",n-ans);

return 0;

}

最小路徑覆蓋

zoj 2521 led display 題意 七段數碼顯示器,乙個數碼上的7段燈可以選擇滅掉一些後重複使用這個數碼,但滅掉的段不能再亮了。比如 6 可以 滅掉左小角的一段變成 5 來使用。但自己不能重複使用,即最少滅一段才能再次使用。現在按次序給出 乙個要現實的數碼序列,求需要的最少的燈數,使得能...

最小路徑覆蓋

差不多是模板題了 分析 最小路徑覆蓋 n 最大匹配數 n為 總點數 因為匹配的點 相互 交叉形成一條條最長路徑 剩餘沒匹配的點需要進行就是需要匹配數 及 最小路徑覆蓋數 include using namespace std define maxn 1005 int match maxn int v...

最小路徑覆蓋

最小路徑覆蓋 最小路徑覆蓋 path covering 是 路徑 覆蓋 點 即用盡量少的不相交簡單路徑覆蓋有向無環圖g的所有頂點,即每個頂點嚴格屬於一條路徑,路徑的長度可能為0 單個點 最小路徑覆蓋數 g的點數 最小路徑覆蓋中的邊數。應該使得最小路徑覆蓋中的邊數盡量多,但是又不能讓兩條邊在同乙個頂點...