題意:
給你明天的計程車訂單,訂單中包含每個人的起點和終點座標,還有時間,如果一輛計程車想接乙個乘客必須在每個訂單前1分鐘到達,也就是小於等於time-1,問你完成所有訂單要最少多少量計程車...
思路:
典型的最小路徑覆蓋,對於最小路徑覆蓋,我們可以這麼理解,最次的情況是n輛,而只要找到那麼一組可以與其匹配,就是用一輛車的就從n裡減去一輛,我們找到最大的這種匹配數量,也就是最大匹配,然後n-ans ,就行了...這個題目有個地方挺坑的,就是給了個提示,說計程車可能跑到後半夜,一開始我sb了,當時間大於半夜凌晨就更新成第二天的時間,結果wa了,想想也是,更新完以前拉不了的活可能拉了,後來直接把更新的這個去掉就ac了,ac的時候感覺很奇怪,是不是資料弱? 我感覺可以不更新時間,而是把23.01 01.02 變成23.01 25.02,因為說了訂單是按時間順序給的,可是在仔細看看題目,說的是第二天的訂單,第二天是不是就不會出現第三天的任務? 如果會的話就會出現第四天的任務....****,不想了,就當他只有第二天的任務吧,所以無視那條提示就可以ac了.
#include#include#define n_node 500 + 50#define n_edge 300000
typedef struct
star;
typedef struct
node;star e[n_edge];node node[n_node];
intlist[n_node] ,tot;
intmk_dfs[n_node] ,mk_gx[n_node];
voidadd(
inta,
intb)
intabss(
intx)
intmaxx(
intx,
inty)
boolok(node a,node b)
intxyl_dfs(
ints)
}return0;
}int
main
()memset(list,0,
sizeof
(list));tot=1;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
intans=0;memset(mk_gx,255,
sizeof
(mk_gx));
for(i=1;i<=n;i++)
printf("%d\n",n-ans);
}return0;
}
最小路徑覆蓋問題(最小路徑覆蓋)
本題題目描述可以發現很明顯的最小路徑覆蓋問題,又因為最小路徑覆蓋 節點數 二分圖最大匹配數,所以本題可以用匈牙利演算法求出二分圖最大匹配數,也可以向第一題那樣用網路流模型求出最大匹配數。本題建模時不同在於,每個點要分成兩個點,乙個為起點,乙個為終點,再來求二分圖最大匹配。然後麻煩就在於本題也要輸出路...
HDU1151最小路徑覆蓋
dag圖 無迴路有向圖 的最小路徑覆蓋 用盡量少的不相交簡單路徑覆蓋有向無環圖 dag 的所有頂點,這就是dag圖的最小路徑覆蓋問題。最小路徑覆蓋數 節點數 最大匹配數 include include include using namespace std const int maxn 200 in...
最小路徑覆蓋
zoj 2521 led display 題意 七段數碼顯示器,乙個數碼上的7段燈可以選擇滅掉一些後重複使用這個數碼,但滅掉的段不能再亮了。比如 6 可以 滅掉左小角的一段變成 5 來使用。但自己不能重複使用,即最少滅一段才能再次使用。現在按次序給出 乙個要現實的數碼序列,求需要的最少的燈數,使得能...