• HUD 2444 The Accomodation of Students (二分图染色+最大匹配)


    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define maxn 2010
    using namespace std;
    int n,m,num,head[maxn],f[maxn],match[maxn],color[maxn];
    struct node
    {
        int u,v,pre;
    }e[maxn*maxn];
    void Add(int from,int to)
    {
        num++;
        e[num].u=from;
        e[num].v=to;
        e[num].pre=head[from];
        head[from]=num;
    }
    bool Color(int s)
    {
        for(int i=head[s];i;i=e[i].pre)
          if(!color[e[i].v])
            {
              color[e[i].v]=-1*color[s];
              if(!Color(e[i].v))return 0;
            }
          else if(color[e[i].v]==color[s])return 0;
        return 1;
    }
    int Dfs(int s)
    {
        for(int i=head[s];i;i=e[i].pre)
          if(f[e[i].v]==0)
            {
              f[e[i].v]=1;
              if(match[e[i].v]==0||Dfs(match[e[i].v]))//XXXXX又是这句错了 下次再写错就XXXX 
                {
                  match[e[i].v]=s;
                  return 1;
                }
            }
        return 0;
    }
    int main()
    {
        while(~scanf("%d%d",&n,&m))
          {
              num=0;
              memset(f,0,sizeof(f));
              memset(head,0,sizeof(head));
              memset(color,0,sizeof(color));
              memset(match,0,sizeof(match));
            int u,v;
            for(int i=1;i<=m;i++)
              {
                  scanf("%d%d",&u,&v);
                  Add(u,v);Add(v,u);
              }
            if(n==1)
                {
                    printf("No
    ");
                    continue;
              }
            color[1]=1;
            if(!Color(1))
              {
                  printf("No
    ");
                  continue;
              }
            int ans=0;
            for(int i=1;i<=n;i++)
              {
                  memset(f,0,sizeof(f));
                  ans+=Dfs(i);
              }
            printf("%d
    ",ans/2);
          }
        return 0;
    }
  • 相关阅读:
    opencv4显示与保存图片
    opencv播放视频
    opencv4.1.0环境配置
    lambda表达式
    基于范围的for循环
    可调用对象包装器std::function
    C++11的类型推导
    Datagridview 实现二维表头
    Linux内存相关sysfs、工具
    关于net core 站点通过iis部署,跨域配置遇到的问题
  • 原文地址:https://www.cnblogs.com/yanlifneg/p/5547434.html
Copyright © 2020-2023  润新知