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

    题目传送门

    虽然这题是“网络流24题”,但我匈牙利Van♂完全不虚,还比(dinic)好写不少(不过就是慢一些)

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int read(){
        int k=0,f=1; char c=getchar();
        for(;c<'0'||c>'9';c=getchar())
          if(c=='-') f=-1;
        for(;c>='0'&&c<='9';c=getchar())
          k=(k<<3)+(k<<1)+c-48;
        return k*f;
    }
    struct zzz{
        int	t,nex;
    }e[10001*2]; int head[101],tot;
    inline void add(int x,int y){
        e[++tot].t=y;
        e[tot].nex=head[x];
        head[x]=tot;
    }
    bool vis[101];int lin[101];
    bool find(int x){
        for(int i=head[x];i;i=e[i].nex)
          if(!vis[e[i].t]){
              vis[e[i].t]=1;
              if(!lin[e[i].t]||find(lin[e[i].t])){
                  lin[e[i].t]=x; return 1;
              }
          }
        return 0;
    }
    int ans;
    int main(){
        int n,m; m=read(),n=read();
        while(1){
            int x=read(),y=read();
            if(x==-1&&y==-1) break;
            add(x,y); add(y,x);
        }
        for(int i=1;i<=n;i++){
            memset(vis,0,sizeof(vis));
            if(find(i)) ans++;
        }
        if(ans==0) printf("No Solution!");
        printf("%d
    ",ans/2);
        for(int i=m;i<=n;i++){
            if(lin[i]>0&&lin[i]<=m&&ans){
                ans--;
                printf("%d %d
    ",lin[i],i);
            }  
        }
        return 0;
    }
    
  • 相关阅读:
    Codeforces Gym 101138 D. Strange Queries
    BZOJ 4236: JOIOJI
    BZOJ 2654: tree
    POJ 1390 Block
    2048
    BZOJ 2412: 电路检修
    BZOJ 2448: 挖油
    BZOJ 3907: 网格
    Codeforces 727 D T-shirts Distribution
    BZOJ 1485: [HNOI2009]有趣的数列
  • 原文地址:https://www.cnblogs.com/morslin/p/11854768.html
Copyright © 2011-2022 走看看