zoukankan      html  css  js  c++  java
  • poj1274

    题解:

    二分图匹配

    裸题匈牙利匹配

    代码:

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    const int N=2005;
    int fi[N],f[N],num,zz[N],n,m,ne[N],match[N],y,x;
    int dfs(int x)
    {
        for (int i=fi[x];i;i=ne[i])
         if (!f[zz[i]])
          {
              f[zz[i]]=1;
              if (!match[zz[i]]||dfs(match[zz[i]]))
               {
                   match[zz[i]]=x;
                   return 1;
               }
          }
        return 0;  
    }
    void jb(int x,int y)
    {
        ne[++num]=fi[x];
        fi[x]=num;
        zz[num]=y;
    }
    int main()
    {
        while (~scanf("%d%d",&n,&m))
         {
             memset(fi,0,sizeof fi);
             memset(match,0,sizeof match);
             num=0;
             for (int i=1;i<=n;i++)
              {
                  scanf("%d",&y);
                  while (y--)
                   {
                       scanf("%d",&x);
                       jb(i,x);
                   }
              }
             int ans=0; 
             for (int i=1;i<=n;i++)
             {
                 memset(f,0,sizeof f);
                 ans+=dfs(i);
             } 
            printf("%d
    ",ans); 
         }
    } 
  • 相关阅读:
    第一章、Docker 简介
    远程库的创建及操作
    分支
    Git常用命令
    初始化本地仓库
    Git的本地结构与远程中心
    Git的安装
    版本控制系统
    冒泡排序
    选择排序
  • 原文地址:https://www.cnblogs.com/xuanyiming/p/8231370.html
Copyright © 2011-2022 走看看