zoukankan      html  css  js  c++  java
  • LA 3126 二分图匹配 最小路径覆盖

    本题最主要的就是拆点G[maxn][maxn],前面的是原来的点u,后面的是相对的u',如果接完客人u可以再去接客人v,则连G[u][v] = true; 然后就KM下,用n-m(匹配数)就是答案;

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<cmath>
    using namespace std;
    
    const int maxn = 505;
    
    int n,T,ans;
    struct guest{
    	int sx,sy;
    	int tx,ty;
    	int st;
    	int time;
    }gu[maxn];
    bool G[maxn][maxn];
    int link[maxn];
    int vis[maxn];
    
    bool judge(int i,int j){
    	int time = abs(gu[j].sx - gu[i].tx) + abs(gu[j].sy - gu[i].ty);
    	if(time + gu[i].st + gu[i].time < gu[j].st )  return true;
    	else return false;
    }
    bool dfs(int u){
    	for(int v=1;v<=n;v++){
    		if(G[u][v] && !vis[v]){
    			vis[v] = true;
    			if(link[v] == -1 || dfs(link[v])){
    				link[v] = u;
    				return true;
    			}
    		}
    	}
    	return false;
    }
    void KM(){
    	ans = 0;
    	memset(link,-1,sizeof(link));
    	for(int i=1;i<=n;i++){
    		memset(vis,0,sizeof(vis));
    		if(dfs(i))  ans++;
    	}
    }
    int main()
    {
    	//if(freopen("input.txt","r",stdin)== NULL)  {printf("Error\n"); exit(0);}
    	cin>>T;
    	for(int t=1;t<=T;t++){
    		cin>>n;
    		
    		for(int i=1;i<=n;i++){
    			int a,c; 
    			char b,d;
       			cin>>a>>b>>c;
       			gu[i].st = 60*a + c;
       			cin>>gu[i].sx>>gu[i].sy>>gu[i].tx>>gu[i].ty;
       			gu[i].time = abs(gu[i].sx - gu[i].tx) + abs(gu[i].sy - gu[i].ty);
    			   
    		}
    		
    		memset(G,0,sizeof(G));
    		for(int i=1;i<=n;i++)
    		   for(int j=i+1;j<=n;j++){
    		   	 if(judge(i,j) )   G[i][j] = true;
       			 else if(judge(j,i))   G[j][i] = true;
       		}
       		KM();
    		printf("%d\n",n-ans);
    	}
    }
     
    

      

  • 相关阅读:
    Jmeter参数化-用户定义的变量
    Jmeter进行文件下载
    Jmeter进行文件上传
    Jmeter进行HTTP接口测试
    Jmeter元件作用域及执行顺序
    activiti 汉化
    Spring boot web app项目
    spring boot整合activiti rest api详细教程
    Spring Boot自动配置原理
    spring bean注解使用详解
  • 原文地址:https://www.cnblogs.com/acmdeweilai/p/3091355.html
Copyright © 2011-2022 走看看