zoukankan      html  css  js  c++  java
  • hdu 2063 给男女匹配 (匈牙利算法)

    来源:http://acm.hdu.edu.cn/showproblem.php?pid=2063 

    题意:

    有k个组合a,b组合,代表a愿意与b坐过山车,共m个女生 n个男生,问有多少个满意的匹配

    题解:

    这是一道匈牙利算法的裸题,用递归询问是否能安排好某个女生,如果能就ans++

    注意,在同一回合的询问中,某个女生只寻找一次其它男生,第二次寻找时一定无法找到,直接返回0就行

    这是我第二次做这道题,在前几个月已经做过,没想到这就是传说中的二分图  Orz

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<vector>
    using namespace std;
    const int maxn = 500+5;
    
    int part[maxn];
    bool vi[maxn];
    int n,m,k;
    
    vector<int>ma[maxn];
    
    bool is_ok(int x)
    {
    	 if(vi[x]==0)vi[x]=1;
    	 else return 0;
         for(int i=0;i<ma[x].size();i++)
    	 {
              if(part[ma[x][i]]==0||is_ok(part[ma[x][i]]))
    		  {
    			  part[ma[x][i]]=x;
    			  return 1;
    		  }
    	 }
    	 return 0;
    }
    
    int main()
    {
        while(scanf("%d",&k)!=EOF)
    	{
    		  if(k==0)break;
    		  scanf("%d %d",&m,&n);
    		  int ans=0;
    		  for(int i=1;i<maxn;i++)
    		  {
    			  ma[i].clear();
    			  part[i]=0;
    		  }
      	      for(int i=1;i<=k;i++)
    		  {
    			  int a,b;
     			   scanf("%d %d",&a,&b);
    			   ma[a].push_back(b);
    		  }
    		  for(int i=1;i<=m;i++)
    		  {
    			   for(int j=1;j<=m;j++)vi[j]=0;
                   if(is_ok(i))
          			   ans++;
    		  }
    		  printf("%d
    ",ans);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    git 常用命令
    flask汇总
    flask自定义转换器
    css,js,jquery的载入方式和属性控制
    python import xx和from xx import x 中的坑
    CPython中的GIL
    python装饰器的参数传递
    python函数中的参数(关键字参数,默认参数,位置参数,不定长参数)
    python 闭包
    Java数据类型和对象的引用
  • 原文地址:https://www.cnblogs.com/carcar/p/9079442.html
Copyright © 2011-2022 走看看