zoukankan      html  css  js  c++  java
  • 飞行员配对方案问题

    二分图匹配即可水过
    没什么可说的

    //Writer:jr HSZ;%%%WJMZBMR
    #include<bits/stdc++.h>
    #define LL long long
    #define reg register int
    #define f(i,a,b) for(reg i=a;i<=b;i++)
    using namespace std;
    int m,n,ans;
    int match[2005];
    bool used[2005];
    struct E {
        int nxt,to;
    } e[2005];
    int head[2005],cnt;
    void add(int bg,int ed) {
        e[++cnt].nxt=head[bg];
        e[cnt].to=ed;
        head[bg]=cnt;
    }
    bool dfs(int x) {
        for(int i=head[x]; i; i=e[i].nxt) {
            int v=e[i].to;
            if(!used[v]) {
                used[v]=1;
                if(!match[v]||dfs(match[v])) {
                    match[v]=x;
                    return 1;
                }
            }
    
        }
        return 0;
    }
    int u,v;
    int main() {
        cin>>n>>m;
        for(;;) {
            scanf("%d%d",&u,&v);
            if(u==-1&&v==-1)break;
            add(u,v);
        }
        for(int i=1; i<=n; i++) {
            memset(used,0,sizeof used);
            if(dfs(i))ans++;
        }
        if(!ans)cout<<"No Solution!";
        else {
            cout<<ans<<endl;
            f(i,1,m) {
                if(match[i])
                printf("%d %d
    ",match[i],i);
            }
        }
        return 0;
    }
    
    
    我是咸鱼。转载博客请征得博主同意Orz
  • 相关阅读:
    作业3.14下
    作业3.14上
    作业3.13 下
    作业 3.13上
    2017.3.10上午
    2017.3.9上午
    2017.3.23-morning
    2017.3.22-morning
    2017.3.21-afternoon
    2017.3.21-morning
  • 原文地址:https://www.cnblogs.com/sdfzhsz/p/9266151.html
Copyright © 2011-2022 走看看