zoukankan      html  css  js  c++  java
  • 金华网赛G(最大费用最大流)&hdu4406

    累尿了。调不出来。

    可能:

    1.建图有问题

    2.模板有问题(雅埋蝶啊)

    3.精度有问题

    参考:http://www.cnblogs.com/jianglangcaijin/archive/2012/10/06/2713375.html

    浪费时间太长了,A不了,先放一放,周日再搞

    未AC代码。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <queue>
    #define min(x,y) ((x)<(y)?(x):(y))
    using namespace std;
    
    
    struct Node
    {
     int u,v,flow,next;
     double cost;
    };
    
    
    const int INF=1000000000;
    Node edges[40005];
    int e,S,T;
    int head[1005],in[1005],pre[1005],flow[1005];
    double cost[1005];
    
    
    void add(int u,int v,int flow,double cost)
    {
     edges[e].u=u;
     edges[e].v=v;
     edges[e].flow=flow;
     edges[e].cost=cost;
     edges[e].next=head[u];
     head[u]=e++;
    }
    
    
    void Add(int u,int v,int flow,double cost)
    {
     add(u,v,flow,cost);
     add(v,u,0,-cost);
    }
    
    
    int OK(int s,int t)
    {
     int i,u,v,f;
     double c;
     queue<int> Q;
    
     memset(pre,-1,sizeof(pre));
     memset(in,0,sizeof(in));
     memset(flow,0,sizeof(flow));
     for(i=0;i<=t;i++) cost[i]=-1.0*INF;
     cost[s]=0;flow[s]=INF;Q.push(s);in[s]=1;
     while(!Q.empty())
     {
         u=Q.front();
         Q.pop();
    
         in[u]=0;
         for(i=head[u];i!=-1;i=edges[i].next)
         {
             v=edges[i].v;
             f=edges[i].flow;
             c=edges[i].cost;
             if(f>0&&cost[v]<cost[u]+c)
             {
                 cost[v]=cost[u]+c;
                 flow[v]=min(flow[u],f);
                 pre[v]=i;
                 if(!in[v]) Q.push(v),in[v]=1;
             }
         }
     }
     return flow[t];
    }
    
    
    int MCMF(int s,int t)
    {
     int minflow,mincost=0,i;
    
     while(minflow=OK(s,t))
     {
         for(i=pre[t];i!=-1;i=pre[edges[i].u])
         {
             mincost+=minflow*edges[i].cost;
             edges[i].flow-=minflow;
             edges[i^1].flow+=minflow;
         }
     }
     return mincost;
    }
    
    int a[45][25],n,m,K,s[25],p[25];
    
    double cal(int x,int w)
    {
     return (4.0-3.0*(100-x)*(100-x)/1600)*w;
    }
    
    int main()
    {
     while(scanf("%d%d%d",&n,&K,&m),n||m||K)
     {
         int i,j;
         for(i=1;i<=m;i++) scanf("%d",&p[i]);
         for(i=1;i<=m;i++) scanf("%d",&s[i]);
         for(i=1;i<=n;i++) for(j=1;j<=m;j++) scanf("%d",&a[i][j]);
         S=0;
         T=n+m+1;
         memset(head,-1,sizeof(head));
         e=0;
         for(i=1;i<=n;i++) Add(i+m,T,K,0);
         for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(a[i][j])
             Add(j,i+m,K,0);
         double pre,cur;
         for(i=1;i<=m;i++)
         {
             if(s[i]<60)
             {
                 Add(S,i,60-s[i],1.0*INF);
                 pre=cal(60,p[i]);
                 for(j=61;j<=100;j++)
                 {
                     cur=cal(j,p[i]);
                     Add(S,i,1,cur-pre);
                     pre=cur;
                 }
             }
             else
             {
                 pre=cal(s[i],p[i]);
                 for(j=s[i]+1;j<=100;j++)
                 {
                     cur=cal(j,p[i]);
                     Add(S,i,1,cur-pre);
                     pre=cur;
                 }
             }
         }
         MCMF(S,T);
         for(i=head[S];i!=-1;i=edges[i].next)
            s[edges[i].v]+=edges[i^1].flow;
         for(i=1;i<=m;i++)
            printf("%d ",s[i]);
         int sum=0;
         for(i=1;i<=m;i++) sum+=p[i];
         double ans=0;
         for(i=1;i<=m;i++)
         {
             if(s[i]<60) break;
             ans+=cal(s[i],p[i])/sum;
         }
         if(i<=m) ans=0;
         printf("%.6lf\n",ans);
     }
     return 0;
    }
  • 相关阅读:
    vue2 在methods 中无法获取this对象
    mysql-set
    laravel 模板
    laravel save() 返回 null
    如何设置电脑允许远程访问并修改电脑用户密码?
    laravel报错:Unable to detect application namespace.
    b站操作系统2程序的顺序执行与并发执行
    b站计算机网络谢希仁4物理层
    b站计算机网络谢希仁2性能
    b站J数据库13之封装通用的增删改查方法
  • 原文地址:https://www.cnblogs.com/markliu/p/2738248.html
Copyright © 2011-2022 走看看