• 【PowerOJ1736&网络流24题】飞行员配对方案问题(最小割)


    题意:

     

     n<=100,要求输出方案

    思路:准备把没刷的24题从头搞一遍

    输出方案的话就在增广的时候记一下另一端的编号就好

      1 #include<bits/stdc++.h>
      2 using namespace std;
      3 typedef long long ll;
      4 typedef unsigned int uint;
      5 typedef unsigned long long ull;
      6 typedef long double ld;
      7 typedef pair<int,int> PII;
      8 typedef pair<ll,ll> Pll;
      9 typedef vector<int> VI;
     10 typedef vector<PII> VII;
     11 //typedef pair<ll,ll>P;
     12 #define N  300010
     13 #define M  200010
     14 #define INF 1e9
     15 #define fi first
     16 #define se second
     17 #define MP make_pair
     18 #define pb push_back
     19 #define pi acos(-1)
     20 #define mem(a,b) memset(a,b,sizeof(a))
     21 #define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
     22 #define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
     23 #define lowbit(x) x&(-x)
     24 #define Rand (rand()*(1<<16)+rand())
     25 #define id(x) ((x)<=B?(x):m-n/(x)+1)
     26 #define ls p<<1
     27 #define rs p<<1|1
     28 
     29 const ll MOD=1e9+7,inv2=(MOD+1)/2;
     30       double eps=1e-6;
     31       int dx[4]={-1,1,0,0};
     32       int dy[4]={0,0,-1,1};
     33 
     34 int head[N],vet[N],len[N],nxt[N],dis[N],gap[N],x[N],y[N],f[N],s,S,T,tot;
     35 
     36 int read()
     37 {
     38    int v=0,f=1;
     39    char c=getchar();
     40    while(c<48||57<c) {if(c=='-') f=-1; c=getchar();}
     41    while(48<=c&&c<=57) v=(v<<3)+v+v+c-48,c=getchar();
     42    return v*f;
     43 }
     44 
     45 void add(int a,int b,int c)
     46 {
     47     nxt[++tot]=head[a];
     48     vet[tot]=b;
     49     len[tot]=c;
     50     head[a]=tot;
     51 
     52     nxt[++tot]=head[b];
     53     vet[tot]=a;
     54     len[tot]=0;
     55     head[b]=tot;
     56 }
     57 
     58 int dfs(int u,int aug)
     59 {
     60     if(u==T) return aug;
     61     int e=head[u],val=s-1,flow=0;
     62     while(e)
     63     {
     64         int v=vet[e];
     65         if(len[e])
     66         {
     67             if(dis[u]==dis[v]+1)
     68             {
     69                 int t=dfs(v,min(len[e],aug-flow));
     70                 if(t) f[u]=v;
     71                 len[e]-=t;
     72                 len[e^1]+=t;
     73                 flow+=t;
     74                 if(dis[S]>=s) return flow;
     75                 if(aug==flow) break;
     76             }
     77             val=min(val,dis[v]);
     78         }
     79         e=nxt[e];
     80     }
     81     if(!flow)
     82     {
     83         gap[dis[u]]--;
     84         if(!gap[dis[u]]) dis[S]=s;
     85         dis[u]=val+1;
     86         gap[dis[u]]++;
     87     }
     88     return flow;
     89 }
     90 
     91 int maxflow()
     92 {
     93     rep(i,0,s) gap[i]=0;
     94     rep(i,1,s) dis[i]=0;
     95     gap[0]=s;
     96     int ans=0;
     97     while(dis[S]<s) ans+=dfs(S,INF);
     98     return ans;
     99 }
    100 
    101 int main()
    102 {
    103     //freopen("1.in","r",stdin);
    104     int m=read(),n=read();
    105     rep(i,1,n) head[i]=0;
    106     tot=1;
    107     int l=1;
    108     while(1)
    109     {
    110         l++;
    111         x[l]=read(),y[l]=read();
    112         if(x[l]==-1) break;
    113         add(x[l],y[l],1);
    114     }
    115     s=n+m;
    116     S=++s;
    117     T=++s;
    118     rep(i,1,m) add(S,i,1);
    119     rep(i,m+1,n) add(i,T,1);
    120     int ans=maxflow();
    121     if(ans==0)
    122     {
    123         printf("No Solution!
    ");
    124         return 0;
    125     }
    126     printf("%d
    ",ans);
    127     rep(i,1,m)
    128      if(f[i]) printf("%d %d
    ",i,f[i]);
    129 
    130     return 0;
    131 }
  • 相关阅读:
    Linux 配置中文环境
    CookieContainer 丢失Cookie
    h5调用摄像头
    网络编程之Reactor 模式
    图形化命令行工具:
    关于VSTO调用Excel后进程无法退出的解决方案:
    ActionLink()与jquery更好地结合建造MVC网页:
    实现一个特殊栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作
    用数组结构实现大小固定的栈和队列
    比较器整理
  • 原文地址:https://www.cnblogs.com/myx12345/p/11734140.html
Copyright © 2020-2023  润新知