POJ2060最小路徑覆蓋

2021-06-29 04:02:59 字數 1003 閱讀 8389

題意:

有n個任務,如果時間來得及幹完某些任務後還可以接著幹別的任務,給乙個任務清單,問最少派出去多少人能完成所有任務。

思路: 

比較簡單的追小路徑覆蓋問題了,在dag中找到最少的簡單路徑去覆蓋所有點,結論等於n-最大匹配數,可以這樣理解,最開始沒有邊任務都需要乙個人,共n個,然後只要有一條邊(幹完a活來的及幹b活那麼連邊ab),就有可能減少乙個人,當a-b a-c這樣的時候只能節省其中的一條,匹配也是,只能把a匹配給乙個,這樣說是不是很容易理解為什麼最小路徑覆蓋的結論是n-最大匹配數了吧。

#include

#include

#define n_node 500 + 10

#define n_edge 500 * 500 + 100

typedef struct

node;

typedef struct

star;

node node[n_node];

star e[n_edge];

int list[n_node] ,tot;

int mkgx[n_node] ,mkdfs[n_node];

void add(int a ,int b)

int dfs_xyl(int x)

}return 0;

}int abss(int x)

bool ok(int a ,int b)

int main ()

memset(list ,0 ,sizeof(list));

tot = 1;

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

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

memset(mkgx ,255 ,sizeof(mkgx));

int ans = 0;

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

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

}return 0;

}

poj2060 最小路徑覆蓋

題意 有n個任務 開始時間 起始地點 終止地點。每個地點可以派出一輛計程車,如果計程車完成任務i後還可以到達任務j,那麼它可以繼續執行任務j。現在問最少可以排除多少輛計程車?演算法 1 最小路徑覆蓋 2 在無圈有向圖中 最小路徑覆蓋 最大匹配數 3 建圖 如果任務i和任務j可以由一輛計程車共同執行,...

poj2060最小路徑覆蓋

俄羅斯套娃,如果i能裝到j裡面,則從i到j建一條有向邊,問最後能看到幾個娃娃,即需要多少條路徑能夠覆蓋到所有節點。include using namespace std const int oo 1e9 const int mm 111111 const int mn 999 int node,sr...

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

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