DAG最少路径覆盖、
忽略了从一个点到另一个点也要算时间,检查了一晚上,~~~~~
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <cmath>
#include <stack>
#include <vector>
#define LL long long
#define myabs(x) ((x)>0?(x):(-(x)))
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=600+10;
int time[maxn][2];
int g[maxn][maxn];
int vis[maxn],leftp[maxn];
int xx1[maxn],x2[maxn],yy1[maxn],y2[maxn];
int n;
int dfs(int u)
{
int i;
for(i=1;i<=n;i++)
{
if(g[u][i]&&!vis[i])
{
vis[i]=1;
if(leftp[i]==-1||dfs(leftp[i]))
{
leftp[i]=u;
return 1;
}
}
}
return 0;
}
int solve()
{
int i,sum=0;
memset(leftp,-1,sizeof(leftp));
for(i=1;i<=n;i++)
{
memset(vis,0,sizeof(vis));
if(dfs(i)) sum++;
}
return n-sum;
}
int main()
{
int T;
cin>>T;
while(T--)
{
scanf("%d",&n);
int i;
int tem,h,mi;
for(i=1;i<=n;i++)
{
scanf("%d:%d%d%d%d%d",&h,&mi,&xx1[i],&yy1[i],&x2[i],&y2[i]);
time[i][0]=h*60+mi;
time[i][1]=time[i][0]+myabs(xx1[i]-x2[i])+myabs(yy1[i]-y2[i]);
}
int j;
memset(g,0,sizeof(g));
for(i=1;i<=n;i++)
{
for(j=i+1;j<=n;j++)
{
if(time[i][1]+myabs(x2[i]-xx1[j])+myabs(y2[i]-yy1[j])<time[j][0]&&i!=j)
g[i][j]=1;
}
}
int ans=solve();
printf("%d\n",ans);
}
return 0;
}