zoukankan      html  css  js  c++  java
  • [网络流24题]飞行员配对方案问题

    https://www.luogu.org/problemnew/show/2756

    二分图网络流

    鬼才去写网络流,输出方案?二分图匹配吧

    网络流输出方案,枚举与汇点有流量的边,输出方案

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    
    const int maxn = 10007; 
    int m,n;
    inline int read() {
        int x=0,f=1;char c=getchar();
        while(c<'0'||c>'9') {if(c=='-')f=-1;c=getchar();}
        while(c<='9'&&c>='0') x=x*10+c-'0',c=getchar();
        return x*f;
    }
    struct Edge{
        int v,next,flow;
    }edge[maxn];int num,head[maxn];
    int link[maxn],used[maxn];
    inline void add_edge(int u,int v) {
        edge[++num].v=v;edge[num].next=head[u];head[u]=num;
    }
    bool find(int x,int f) {
        for(int i=head[x];i;i=edge[i].next) {
            int v=edge[i].v;
            if(used[v]!=f) {
                used[v]=f;
                if(link[v]==-1||find(link[v],f)) {
                    link[v]=x;return true;
                }
            }
        }
        return false;
    }
    int main() {
        m=read(),n=read();
        for(int a,b;1101001;) {
            a=read(),b=read();
            if(a<0&&b<0)break;
            add_edge(a,b);
        }
        int ans=0;
        std::memset(link,-1,sizeof link);
        for(int i=1;i<=m;++i) {
            if(find(i,i))ans++;
        }
        printf("%d
    ",ans);
        for(int i=m+1;i<=n+m;++i) {
            if(link[i]>0) printf("%d %d
    ",link[i],i);
        }
        return 0;
    }
  • 相关阅读:
    mint17上建立lamp环境
    iptables开始ftp
    查看mysql集群状态是否正常
    限制SSH访问源,禁止4A之外的地址跳转访问
    查看cpu、内存和硬盘
    降kipmi0的CPU
    更改密钥对
    eNSP
    划分分区GPT11
    修改虚机IP
  • 原文地址:https://www.cnblogs.com/sssy/p/8119697.html
Copyright © 2011-2022 走看看