zoukankan      html  css  js  c++  java
  • poj 1459Power Network解题报告

    链接:http://poj.org/problem?id=1459

    网络流的压入重标记算法模板,完全按照算法导论的模式打出来的,没有什么优化之类的,只是为了给自己打模板,要省赛了,加油啊。

    View Code
      1 #include<iostream>
      2 #include<cstring>
      3 #include<cstdio>
      4 #define N 105
      5 #define min(x,y) x<y?x:y
      6 #define inf 0x7fffffff
      7 using namespace std;
      8 int f[N][N],c[N][N];
      9 int h[N],e[N];
     10 int n,m,s,t;
     11 int nc,np;
     12 void init()
     13 {
     14     int i;
     15     memset(h,0,sizeof(h));
     16     memset(e,0,sizeof(e));
     17     memset(f,0,sizeof(f));
     18     h[s]=n;
     19     for(i=0;i<n;i++)
     20     {
     21         if(c[s][i])
     22         {
     23             f[s][i]=c[s][i];
     24             f[i][s]=-c[s][i];
     25             e[i]=c[s][i];
     26             e[s]-=c[s][i];
     27         }
     28     }
     29 }
     30 void push(int u,int v)
     31 {
     32     int d=min(e[u],c[u][v]-f[u][v]);
     33     f[u][v]+=d;
     34     f[v][u]=-f[u][v];
     35     e[u]-=d;
     36     e[v]+=d;
     37 }
     38 bool relabel(int u)
     39 {
     40     int mh=inf,i;
     41     for(i=0;i<n;i++)
     42     {
     43         if(c[u][i]>f[u][i])
     44         mh=min(mh,h[i]);
     45     }
     46     if(mh==inf)
     47     return false;
     48     h[u]=mh+1;
     49     for(i=0;i<n;i++)
     50     {
     51         if(e[u]==0)
     52         break;
     53         if(h[i]==mh&&c[u][i]>f[u][i])
     54         push(u,i);
     55     }
     56     return true;
     57 }
     58 int push_relabel()
     59 {
     60     init();
     61     int i;
     62     bool flag=true;
     63     while(flag)
     64     {
     65         flag=false;
    
     66         for(i=0;i<n-2;i++)
     67         if(e[i]>0)
     68         flag=flag||relabel(i);
     69     }
     70     return e[t];
     71 }
     72 int main()
     73 {
     74     int i,x,y,z;
     75     char tmp[10];
     76     while(scanf("%d%d%d%d",&n,&np,&nc,&m)!=EOF)
     77     {
     78         s=n;
     79         t=n+1;
     80         n+=2;
     81         memset(c,0,sizeof(c));
     82         for(i=0;i<m;i++)
     83         {
     84             scanf("%s",tmp);
     85             sscanf(tmp,"(%d,%d)%d",&x,&y,&z);
     86             c[x][y]=z;
     87         }
     88         for(i=0;i<np;i++)
     89         {
     90             scanf("%s",tmp);
     91             sscanf(tmp,"(%d)%d",&x,&z);
     92             c[s][x]=z;
     93         }
     94         for(i=0;i<nc;i++)
     95         {
     96             scanf("%s",tmp);
     97             sscanf(tmp,"(%d)%d",&x,&z);
     98             c[x][t]=z;
     99         }
    100         printf("%d\n",push_relabel());
    101     }
    102     return 0;
    103 }
  • 相关阅读:
    vs2013如何在C++中调用Lua(二)
    用vs2013编译lua源码方法(一)
    使用Sublime Text 直接运行Quick-cocos2d-x 项目
    SubmitText 中配置lua 运行环境
    在VS2012/2013上编辑和调试Quick-cocos2d-x的Lua代码
    Cocos2d-x 开发 v3.2 建立新项目并添加库文件
    计算一段函数的执行效率
    C++中嵌入Lua脚本环境搭建
    Android开发环境配置
    cocos2d-x-3.1.1 创建项目
  • 原文地址:https://www.cnblogs.com/caozhenhai/p/2512254.html
Copyright © 2011-2022 走看看