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

      

  • 相关阅读:
    并发容器之CopyOnWriteArrayList
    Python os.listdir() 方法
    Python os.link() 方法
    Python os.lchown() 方法
    Python os.lchmod() 方法
    Python os.lchflags() 方法
    APP test
    jmeter 启动报错:not able to find java executable or version
    sqlserver数据库性能测试方法
    jmeter基础概念
  • 原文地址:https://www.cnblogs.com/carcar/p/9079442.html
Copyright © 2011-2022 走看看