#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
const int maxn=500+5;
int x1[maxn],y[maxn],x2[maxn],y2[maxn],t1[maxn],t2[maxn];
bool line[maxn][maxn],used[maxn];
int match[maxn],n;
bool find(int i)
{
for(int j=1;j<=n;j++)
{
if(line[i][j]==true&&used[j]==false)
{
used[j]=true;
if(match[j]==-1||find(match[j]))
{
match[j]=i;
return true;
}
}
}
return false;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(line,false,sizeof(line));
memset(match,-1,sizeof(match));
scanf("%d",&n);
for(int i=1;i<=n;i++){
int a,b;char c[5];
scanf("%s%d%d%d%d",c,&x1[i],&y[i],&x2[i],&y2[i]);
a=(c[0]-'0')*10+c[1]-'0';
b=(c[3]-'0')*10+c[4]-'0';
t1[i]=a*60+b;
t2[i]=t1[i]+abs(x1[i]-x2[i])+abs(y[i]-y2[i]);
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(t2[i]+abs(x2[i]-x1[j])+abs(y2[i]-y[j])<t1[j]) line[i][j]=true;
}
}
int ans=0;
for(int i=1;i<=n;i++){
memset(used,false,sizeof(used));
if(find(i)) ans+=1;
}
printf("%d\n",n-ans);
}
return 0;
}
UVA 1201 Taxi Cab Scheme(最小路徑覆蓋)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.