zoukankan      html  css  js  c++  java
  • 【POJ1698】Alice's Chance-二分图多重匹配

    测试地址:Alice's Chance

    题目大意:演员Alice接到N个拍电影任务,一部电影在一周中只有某些日子能拍,并且每部电影都有一定的任务(至少要拍D天)和期限(在W周内拍完),而Alice一天只能去拍一部电影,求能不能制定一个排片计划,使得Alice能够接下所有拍电影的任务。

    做法:从题目中可以看出,电影与每一天之间是一对多的匹配关系,因此可以用二分图模型中的多重匹配来解决,代码写起来很像匈牙利算法。

    以下是本人代码:

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    int T,n,limit[25],able[10],bmap[25][510],maxw;
    int cx[510],cy[25][510];
    bool vis[25];
    
    bool findpath(int u)
    {
      for(int i=1;i<=n;i++)
      {
        if (bmap[i][u]&&!vis[i])
    	{
    	  vis[i]=1;
    	  if (cy[i][0]<limit[i])
    	  {
    	    cy[i][++cy[i][0]]=u;
    		return 1;
    	  }
    	  else
    	  {
    	    for(int j=1;j<=cy[i][0];j++)
    		  if (findpath(cy[i][j]))
    		  {
    		    cy[i][j]=u;
    		    return 1;
    	      }
    	  }
    	}
      }
      return 0;
    }
    
    bool mulmatch()
    {
      int ans=0,s=0;
      memset(cx,0,sizeof(cx));
      memset(cy,0,sizeof(cy));
      for(int i=1;i<=maxw*7;i++)
      {
        memset(vis,0,sizeof(vis));
        if (!cx[i])
    	{
    	  if (findpath(i)) ans++;
        }
      }
      for(int i=1;i<=n;i++) s+=limit[i];
      return ans==s;
    }
    
    int main()
    {
      scanf("%d",&T);
      while(T--)
      {
        memset(bmap,0,sizeof(bmap));
        scanf("%d",&n);
    	maxw=0;
    	for(int i=1,w;i<=n;i++)
    	{
    	  memset(able,0,sizeof(able));
    	  for(int j=1;j<=7;j++) scanf("%d",&able[j]);
    	  scanf("%d%d",&limit[i],&w);
    	  maxw=max(w,maxw);
    	  for(int j=1;j<=7;j++)
    	    if (able[j])
    		{
    	      for(int k=0;k<w;k++)
    		    bmap[i][k*7+j]=1;
    	    }
    	}
    	
    	if (mulmatch()) printf("Yes
    ");
    	else printf("No
    ");
      }
      
      return 0;
    }
    


  • 相关阅读:
    MylSAM引擎的特点及场景使用
    innodb的特性及常用场景
    标准库functools.wraps的使用方法
    requests基本使用
    linux常用指令
    爬操插件json作指示图文详解
    Django form表单
    python 装饰器
    Django 的路由分配系统
    Django 的ORM
  • 原文地址:https://www.cnblogs.com/Maxwei-wzj/p/9793835.html
Copyright © 2011-2022 走看看