POJ 2060

来源:互联网 发布:淘宝网纯棉四件套 编辑:程序博客网 时间:2024/05/20 13:37

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;}