poj 2060 最小路径覆盖
2013-08-29 10:52
288 查看
传送门
题意:就是出租车,在某时间会有生意,然后有起点终点。问最少多少出租车可以完成这些。。。。。。。自己看题吧。
思路:将1-n列两列,对于i任务,如果在完成它之后可以完成j任务,那么将左边i与右边j连边令p[i][j]=1;然后就构成了一张二分图吧,然后就是求最小路径覆盖。
题意:就是出租车,在某时间会有生意,然后有起点终点。问最少多少出租车可以完成这些。。。。。。。自己看题吧。
思路:将1-n列两列,对于i任务,如果在完成它之后可以完成j任务,那么将左边i与右边j连边令p[i][j]=1;然后就构成了一张二分图吧,然后就是求最小路径覆盖。
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int t,n,h,m,s[505],sx[505],sy[505],tx[505],ty[505],ans; int l[505]; bool p[505][505],vis[505]; int abs(int x) { return x>0?x:-x; } bool go(int x) { for(int i=1;i<=n;i++) { if(vis[i]==0&&p[x][i]) { vis[i]=1; if(l[i]==0||go(l[i])) { l[i]=x; return true; } } } return false; } int main() { scanf("%d",&t); while(t--) { memset(p,0,sizeof(p)); memset(l,0,sizeof(l)); scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d:%d%d%d%d%d",&h,&m,&sx[i],&sy[i],&tx[i],&ty[i]); s[i]=h*60+m; for(int j=i-1;j>0;j--) { if(s[i]>s[j]+abs(tx[j]-sx[j])+abs(ty[j]-sy[j])+abs(sx[i]-tx[j])+abs(sy[i]-ty[j])) { p[j][i]=1; } } } ans=0; for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(go(i))ans++; } cout<<n-ans<<endl; } return 0; }
相关文章推荐
- POJ:2060-Taxi Cab Scheme(最小路径覆盖)
- POJ 2060 Taxi Cab Scheme (最小路径覆盖)
- POJ 2060 最小路径覆盖
- 【二分图+最小路径覆盖+注释】北大 poj 2060 Taxi Cab Scheme
- HDU 1350 & HDU 1960 & POJ 2060 Taxi Cab Scheme【二分图之最小路径覆盖,经典】
- poj 2060 Taxi Cab Scheme 最小路径覆盖
- POJ - 2060 Taxi Cab Scheme 二分图 最小路径覆盖
- POJ 2060 最小路径覆盖
- POJ2060 Taxi Cab Scheme [最小路径覆盖]
- POJ2060-Taxi Cab Scheme (最小路径覆盖)
- poj 2060(最小路径覆盖)
- poj 2060 Taxi Cab Scheme(DAG图的最小路径覆盖)
- poj 2060 Taxi Cab Scheme 最小路径覆盖
- POJ 2060 Taxi Cab Scheme(匈牙利—最小路径覆盖)
- POJ 2060 最小路径覆盖 二分图
- poj 2060 二分图 最小路径覆盖 出租车
- 周赛 POJ 2060 最小路径覆盖
- Poj-2060 Taxi Cab Scheme 二分图最小路径覆盖
- 二分图最小路径覆盖--poj2060
- POJ 2060 Taxi Cab Scheme【最小路径覆盖】