http://acm.hdu.edu.cn/showproblem.php?pid=1350
/*************************************************************************
> File Name: main.cpp
> Author: huangshuai
> Mail: huangshuai1993@gmail.com
> Created Time: Sat 09 Mar 2013 08:36:13 PM CST
************************************************************************/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct node
{
int x1,y1,x2,y2;
int start;
int end;
};
node e[505];
int map[505][505];
int vis[505];
int link1[505],m;
int len(int x1,int y1,int x2,int y2)
{
x1=x2-x1>0?x2-x1:x1-x2;
y1=y2-y1>0?y2-y1:y1-y2;
return x1+y1;
}
int dfs(int i)
{
int j;
for(j=0;j<m;j++)
{
if(!vis[j]&&map[i][j])
{
vis[j]=1;
if(link1[j]==-1||dfs(link1[j]))
{
link1[j]=i;
return 1;
}
}
}
return 0;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&m);
int i;
for(i=0;i<m;i++)
{
int hh,mm;
scanf("%d:%d",&hh,&mm);
e[i].start=hh*60+mm;
scanf("%d%d%d%d",&e[i].x1,&e[i].y1,&e[i].x2,&e[i].y2);
e[i].end=e[i].start+len(e[i].x1,e[i].y1,e[i].x2,e[i].y2);
}
int j;
memset(map,0,sizeof(map));
for(i=0;i<m;i++)
{
for(j=i+1;j<m;j++)
{
if(e[i].end+len(e[i].x2,e[i].y2,e[j].x1,e[j].y1)<e[j].start)
map[i][j]=1;
}
}
memset(link1,-1,sizeof(link1));
int s=0;
for(i=0;i<m;i++)
{
memset(vis,0,sizeof(vis));
if(dfs(i))
s++;
}
printf("%d\n",m-s);
}
return 0;
}