• HDU 2063 过山车+poj 1469


    //这是一个非常简单的匹配。其实满感觉这种算法讲道理是可以想到。
    //但是我们这种弱就只能先学了匈牙利算法,然后随便嗨这种题目了。没事结果都一样。

    //这就是匹配算法的DFS形式,有一个BFS形式的,说是适用于稀疏二分图,但是时间复杂度还是(n*m)。。。
    //也不是很懂DFS和BFS版有什么差,但是真的有差别,那就上HK算法了,时间复杂度(sqrt(n)*m);

    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <algorithm>
    #include <queue>
    #include <math.h>
    #include <queue>
    #include <stack>
    using namespace std;
    #define INF 0x3f3f3f
    #define pi acos(-1.0)
    #define LL long long
    #define N 550
    
    int ma[N][N];
    int cx[N],cy[N];
    int vis[N];
    int k,m,n;
    
    
    int fuck(int u)
    {
        for(int i=1; i<=m; i++)
        {
            if(!vis[i]&&ma[u][i])
            {
                vis[i]=1;
                if(cy[i]==-1||fuck(cy[i]))
                {
                    cy[i]=u;
                    return 1;
                }
            }
        }
        return 0;
    }
    
    
    int main()
    {
        while(~scanf("%d",&k)&&k)
        {
            int a,b;
            scanf("%d%d",&n,&m);
            memset(ma,0,sizeof(ma));
            for(int i=0; i<k; i++)
            {
                scanf("%d%d",&a,&b);
                ma[a][b]=1;
            }
            memset(cy,-1,sizeof(cy));
    
    
            int ans=0;
            for(int i=1; i<=n; i++)
            {
                memset(vis,0,sizeof(vis));
                if(fuck(i))
                {
                    ans++;
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }

    poj1469
    题意:p门课,n个人,问你能不能刚好匹配;

    #include<cstdio>
    #include<string.h>
    #include<iostream>
    using namespace std;
    typedef long long LL;
    #define N 300
    int nx,ny;
    int bmap[N][N];
    bool bmask[N];
    int cx[N];
    int cy[N];
    int p,n;
    
    int findpath(int u)
    {
        int i;
        for(int i=1;i<=n;i++)
        {
            if(bmap[u][i]&&!bmask[i])
            {
                bmask[i]=1;
                if(cy[i]==-1||findpath(cy[i]))
                {
                    cy[i]=u;
                    cx[u]=i;
                    return 1;
                }
            }
        }
        return 0;
    }
    
    int Maxmatch()
    {
        int res=0;
        int i,j;
        memset(cx,-1,sizeof(cx));
        memset(cy,-1,sizeof(cy));
        for(i=1;i<=p;i++)
        {
            if(cx[i]==-1)
            {
                memset(bmask,0,sizeof(bmask));
                res+=findpath(i);
            }
        }
        return res;
    }
    
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&p,&n);
            int m;
            memset(bmap,0,sizeof(bmap));
            for(int i=1;i<=p;i++)
            {
                int num,k;
                scanf("%d",&num);
                for(int j=1;j<=num;j++)
                {
                    scanf("%d",&k);
                    bmap[i][k]=1;
                }
            }
            int ans=Maxmatch();
            if(ans==p)
                printf("YES
    ");
            else
                printf("NO
    ");
        }
        return 0;
    }
  • 相关阅读:
    mysql事务
    mysql查询操作教程
    mysql建表约束
    mysql数据库增删改查
    node服务器响应静态资源
    windows下golang版本的升级
    Linux开机错误
    redis命令
    nginx内置变量
    nginx日志
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934538.html
Copyright © 2020-2023  润新知