• 【PowerOJ1737&网络流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  200010
     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],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 bool bfs( )
     59 {
     60     queue<int>q;
     61     rep(i,1,s) dis[i]=-1;
     62     q.push(S),dis[S]=0;
     63     while(!q.empty())
     64     {
     65         int u=q.front();
     66         q.pop();
     67         int e=head[u];
     68         while(e)
     69         {
     70             int v=vet[e];
     71             if(len[e]>0&&dis[v]==-1)
     72             {
     73                 dis[v]=dis[u]+1;
     74                 q.push(v);
     75             }
     76             e=nxt[e];
     77         }
     78     }
     79     return dis[T]!=-1;
     80 }
     81 
     82 int dfs(int u,int aug)
     83 {
     84     if(u==T) return aug;
     85     int e=head[u],val=0,flow=0;
     86     while(e)
     87     {
     88         int v=vet[e];
     89         if(len[e]>0&&dis[v]==dis[u]+1)
     90         {
     91             int t=dfs(v,min(len[e],aug));
     92             if(!t)
     93             {
     94                 e=nxt[e];
     95                 continue;
     96             }
     97             flow+=t;
     98             aug-=t;
     99             len[e]-=t;
    100             len[e^1]+=t;
    101             if(!aug) break;
    102         }
    103         e=nxt[e];
    104     }
    105     if(!flow) dis[u]=-1;
    106     return flow;
    107 }
    108 
    109 int main()
    110 {
    111     int n=read(),m=read();
    112     s=n+m;
    113     S=++s,T=++s;
    114     rep(i,1,s) head[i]=0;
    115     tot=1;
    116     int ans=0;
    117     rep(i,1,n)
    118     {
    119         int x;
    120         scanf("%d",&x);
    121         add(S,i,x);
    122         ans+=x;
    123         while(getchar()==' ')
    124         {
    125             scanf("%d",&x);
    126             add(i,x+n,INF);
    127         }
    128     }
    129     rep(i,1,m)
    130     {
    131         int x=read();
    132         add(i+n,T,x);
    133     }
    134     int tmp=0;
    135     while(bfs()) tmp+=dfs(S,INF);
    136     ans-=tmp;
    137     rep(i,1,n)
    138      if(dis[i]!=-1) printf("%d ",i);
    139     printf("
    ");
    140     rep(i,1,m)
    141      if(dis[i+n]!=-1) printf("%d ",i);
    142     printf("
    ");
    143     printf("%d
    ",ans);
    144     return 0;
    145 }
  • 相关阅读:
    QD提示软件过期a
    病毒conime.exe、mmlucj.exe、severe.exe 查杀办法
    当UG的License服务器换了后, 客户端如何调整?
    怎样理解构造函数和析构函数
    详解Par2 Files
    Nginx的基本使用和配置
    如何使用bootstrap实现轮播图?
    使用相对长度单位rem布局网页内容
    java中如何对汉字进行排序?
    班级日常分享:一天一瞬间!
  • 原文地址:https://www.cnblogs.com/myx12345/p/11743559.html
Copyright © 2020-2023  润新知