zoukankan      html  css  js  c++  java
  • 搭配飞行员

    题目链接:https://loj.ac/problem/6000

    题意:每个飞机都有一个正飞行员和次飞行员,但有些飞行员不能在同一个飞机里,问最多能起飞多少飞机。

    思路:用二分图对飞行员进行匹配就可以了

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    #include<math.h>
    #include<string>
    #include<algorithm>
    #include<queue>
    #include<map>
    typedef long long ll;
    using namespace std;
    int n,m;
    int a[105][105],b[105];
    bool vis[105];
    void init()
    {
        int i,j;
        scanf("%d%d",&n,&m);
        int u,v;
        memset(a,0,sizeof(a));
        while (~scanf("%d%d",&u,&v))
            a[u][v]=a[v][u]=1;
        memset(b,-1,sizeof(b));
    }
    int match(int u)
    {
        int i,j;
        for (i=m+1; i<=n; i++)
        {
            if (a[u][i] && !vis[i])
            {
                vis[i]=true;
                if (b[i]==-1 || match(b[i]))
                {
                    b[i]=u;
                    return 1;
                }
            }
        }
        return 0;
    }
    int main()
    {
        init();
        int ans=0;
        for (int i=1; i<=m; i++)
        {
            memset(vis,false,sizeof(vis));
            ans+=match(i);
        }
        printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    java并发编程
    Linux C++服务器端进程SDK
    定时器SDK
    Redis3.0集群方案分析
    DES
    生成验证码
    MVC Ajax.BeginForm 提交上传图片
    EF LIKE 查询
    JS 60秒后重发送验证码
    EF 指定字段修改
  • 原文地址:https://www.cnblogs.com/zcb123456789/p/12264512.html
Copyright © 2011-2022 走看看