poj2060 最小路徑覆蓋

2021-06-08 11:45:32 字數 1013 閱讀 3081

題意:有n個任務:開始時間、起始地點、終止地點。每個地點可以派出一輛計程車,如果計程車完成任務i後還可以到達任務j,那麼它可以繼續執行任務j。現在問最少可以排除多少輛計程車?

演算法:1、最小路徑覆蓋

2、在無圈有向圖中:最小路徑覆蓋=| p|-最大匹配數

3、建圖:如果任務i和任務j可以由一輛計程車共同執行,則將i和j連線。滿足的條件如下:

任務i的完成時間+從任務i的目的地到達任務j的起始地點所花費的時間《任務 j 的開始時間 - 任務 i 的開始時間

#include#include#includeusing namespace std;

#define maxn 505 // 實際問題時需要修改

int mat[maxn][maxn]; // 鄰接矩陣mat 的0行0列不用

int nx, ny; // 實際問題時矩陣的行列數

int fy[maxn], matx[maxn], maty[maxn];

struct point

p[maxn];

int dfs( int u )

} return 0;

} int maximummatch( )

return ret;

}int main()

{ int n,m,i,j,hour,minute,t1,t2;

char s[10];

scanf("%d",&n);

while(n--)

{scanf("%d",&m);

nx=ny=m;

memset(mat,0,sizeof(mat));

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

{scanf("%s%d%d%d%d",&s,&p[i].a,&p[i].b,&p[i].c,&p[i].d);

sscanf(s,"%d:%d",&hour,&minute);

p[i].time=hour*60+minute;

//cout<

poj2060最小路徑覆蓋

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

POJ2060最小路徑覆蓋

題意 有n個任務,如果時間來得及幹完某些任務後還可以接著幹別的任務,給乙個任務清單,問最少派出去多少人能完成所有任務。思路 比較簡單的追小路徑覆蓋問題了,在dag中找到最少的簡單路徑去覆蓋所有點,結論等於n 最大匹配數,可以這樣理解,最開始沒有邊任務都需要乙個人,共n個,然後只要有一條邊 幹完a活來...

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

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