題意:有n個地方,m個任務,每個任務給出地點,開始的時間和完成需要的時間,問最少派多少工人去可以完成所有的任務。給出任意兩點直接到達需要的時間,-1代表不能到達。
思路:很明顯的最小路徑覆蓋問題,剛開始腦子抽了,沒求最短路直接就做了,題目只給了兩點間直接到達的時間,還可以間接到達,用floyd求出最短路。。。
#include#includeconst int n=300;
const int inf=0x3fffffff;
int head[n],num,match[n],link[n],map[30][30],n,m;
struct edge
e[n*n];
struct node
p[n];
void addedge(int x,int y)
int find(int u)//二分匹配
} }return 0;
}void floyd()//最短路
int main()
for(i=1;i<=m;i++)
floyd();
memset(head,-1,sizeof(head));
num=0;
for(i=1;i<=m;i++)
}memset(match,-1,sizeof(match));
int sum=0;
for(i=1;i<=m;i++)
printf("%d\n",m-sum);
} return 0;
}
POJ3216 最小路徑覆蓋
首先說一下題意,q個區域,m個任務,每個區域任務可能有多個,然後給你個到各地所需時間的矩陣,每個任務都有開始和持續時間,問最少需要多少工人?每個工人只能同時執行乙個任務。通過題意,我的瞬間反應就是先把點拆開再說,因為每個區域可能有多個任務,所以把每個任務都當做一點處理,之後就需要考慮一件事情,乙個工...
最小路徑覆蓋問題(最小路徑覆蓋)
本題題目描述可以發現很明顯的最小路徑覆蓋問題,又因為最小路徑覆蓋 節點數 二分圖最大匹配數,所以本題可以用匈牙利演算法求出二分圖最大匹配數,也可以向第一題那樣用網路流模型求出最大匹配數。本題建模時不同在於,每個點要分成兩個點,乙個為起點,乙個為終點,再來求二分圖最大匹配。然後麻煩就在於本題也要輸出路...
poj2060 最小路徑覆蓋
題意 有n個任務 開始時間 起始地點 終止地點。每個地點可以派出一輛計程車,如果計程車完成任務i後還可以到達任務j,那麼它可以繼續執行任務j。現在問最少可以排除多少輛計程車?演算法 1 最小路徑覆蓋 2 在無圈有向圖中 最小路徑覆蓋 最大匹配數 3 建圖 如果任務i和任務j可以由一輛計程車共同執行,...