P2764 最小路徑覆蓋

2021-09-25 11:18:10 字數 842 閱讀 4597

我們首先將原圖用n條路徑覆蓋,每條邊只經過乙個節點(本身)。

可以知道每合併兩條路徑,路徑覆蓋數就會減少1。現在盡量合併更多的路徑(即將兩個路徑通過一條邊首尾相連)。

所以拆點做二分圖最大匹配即可。

**:

#includeusing namespace std;

const int maxn = 510;

const int inf = 0x3f3f3f3f;

int m, n;

struct node

;vectorg[maxn * 50];

int level[maxn], iter[maxn];

bool b[maxn];

void addedge(int from, int to, int cap)

); g[to].push_back((node));

}void bfs(int s)}}

}int dfs(int v, int t, int f)}}

return 0;

}int max_flow(int s, int t)

}void print(int x)

}int main()

for(int i = 0; i < m; i++)

int x = max_flow(s, t);

//cout << x << endl;

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

if(!b[i]) print(i), printf("\n");;

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

}return 0;

}

P2764 最小路徑覆蓋問題

我做24題的第六題,輸出路徑還是有點糊塗 給定有向圖g v,e 設p是圖g上若干點不相交的簡單路徑的集合,若每個點v屬於v都存在於唯一一條p中的路徑上,則p是g的一條路徑覆蓋。路徑數量最少的路徑覆蓋稱為最小路徑覆蓋。用minpc g 表示圖g的最小路徑覆蓋數.有向無環圖的最小路徑覆蓋問題可轉化為二分...

P2764 最小路徑覆蓋問題

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

P2764 最小路徑覆蓋問題

給定有向圖 g v,e g v,e 設 p 是 g 的乙個簡單路 頂點不相交 的集合。如果 v 中每個定點恰好在p的一條路上,則稱 p 是 g 的乙個路徑覆蓋。p中路徑可以從 v 的任何乙個定點開始,長度也是任意的,特別地,可以為 0 g 的最小路徑覆蓋是 g 所含路徑條數最少的路徑覆蓋。設計乙個有...