zoukankan      html  css  js  c++  java
  • UVA5874 Social Holidaying 二分匹配

    二分匹配简单题,看懂题意,建图比较重要。

    #include<stdio.h>
    #include<string.h>
    #define maxn 1100
    int map[maxn][maxn];
    int a[maxn],b[maxn],match[maxn],vis[maxn];
    int n,m;
    void makemap()
    {
        int i,j,k;
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
            {
                for(k=1;k<=m;k++)
                {
                    if(a[i]+a[j]==b[k])
                    {
                        map[i][j]=1;
                    }
                }
            }
        }
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
                printf("%d ",map[i][j]);
            printf("
    ");
        }
    }
    int dfs(int u)
    {
        int i,j;
        for(i=1;i<=n;i++)
        {
            if(!vis[i]&&map[u][i])
            {
                vis[i]=1;
                if(match[i]==-1||dfs(match[i]))
                {
                    match[i]=u;
                    return 1;
                }
            }
        }
        return 0;
    }
    int main()
    {
        int i,j,t;
        scanf("%d",&t);
        while(t--)
        {
            memset(map,0,sizeof(map));
            scanf("%d%d",&n,&m);
            for(i=1;i<=n;i++)
                scanf("%d",&a[i]);
            for(i=1;i<=m;i++)
                scanf("%d",&b[i]);
            
            makemap();
    
            int ans=0;
            memset(match,-1,sizeof(match));
            
            for(i=1;i<=n;i++)
            {
                memset(vis,0,sizeof(vis));
                if(dfs(i))
                    ans++;
            }
            printf("%d
    ",ans/2);
        }
    }
  • 相关阅读:
    字符串
    决策树
    结构体实验
    指针实验
    打印杨辉三角
    P176 1.2.3
    第七次作业
    第六次作业
    第五次作业
    第四次修改
  • 原文地址:https://www.cnblogs.com/sweat123/p/4738282.html
Copyright © 2011-2022 走看看