hdu 2686 Matrix 最大费用最大流

2014-11-24 08:23:43 · 作者: · 浏览: 0

最小费用最大流改动下,将本来的正边改成负边 就成了 最大费用最大流。

然后构图,自己慢慢构。

拆点,建立流量为1 费用为权值的边。

#include
  
   
#include
   
     #include
    
      #include
     
       #include
      
        using namespace std; const int maxn=2000,maxm=100000,inf=100000000; struct Edge { Edge(){}; Edge(int a,int b,int c,int d){v=a;f=b;w=c;nxt=d;} int v,f,w,nxt; }; int Map[30][30]; int src,sink; struct Edge e[maxm+10]; int g[maxn+10]; int nume; queue
       
        que; int dist[maxn+10]; int prev[maxn+10],pree[maxn+10]; bool inQue[maxn+10]; void add(int u,int v,int f,int w) { e[++nume]=Edge(v,f,-w,g[u]); g[u]=nume; e[++nume]=Edge(u,0,w,g[v]); g[v]=nume; } bool findPath() { while(!que.empty()) que.pop(); que.push(src); int i; for(i=1;i<=sink;i++) dist[i]=inf; dist[src]=0; memset(inQue,false,sizeof(inQue)); inQue[src]=true; while(!que.empty()){ int u=que.front(); que.pop(); for(i=g[u] ; i ;i=e[i].nxt){ if(e[i].f>0&&dist[u]+e[i].w