poj 1495 Power Network dinic()

题目链接:Power Network

题意:总共N个点np个发电站,nc个用户,m条边。给出点的链接方式,和边的权值。问从发电站出发最多能有多少电量传到用户。

题解:创建一个源点与所有的发电站建边,创建一个汇点与所有的用户建边,然后求源点到汇点的最大流。

//#include<bits/stdc++.h>
#include<iostream>
#include<cstring>
#include <cstdlib>
#include<queue>
#define min(a,b) a<b?a:b
#define pb push_back
#define ll long long
#define PI 3.14159265
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define eps 1e-7
const int inf=0x7fffffff;
const int maxn=2e2+5;
using namespace std;
int dis[maxn];
int tic[110][110];
int n,np,nc,m;
bool bfs()
{
    int s;
    memset(dis,0xff,sizeof(dis));
    dis[0]=0;
    queue<int>q;
    q.push(0);
    while(!q.empty())
    {
        s=q.front();q.pop();
        for(int i=0;i<=n+1;i++)
        {
            if(dis[i]<0&&tic[s][i]>0)
            {
                dis[i]=dis[s]+1;
                q.push(i);
            }
        }
    }
    if(dis[n+1]>0)return true;
    else return false;
}
int dfs(int v,int low)
{
    int a;
    if(v==n+1)return low;
    for(int i=0;i<=n+1;i++)
    {
        if(tic[v][i]>0&&dis[i]==dis[v]+1&&(a=dfs(i,min(low,tic[v][i]))))
        {
            tic[v][i]-=a;
            tic[i][v]+=a;
            return a;
        }
    }
    return 0;
}
int dinic()
{
    int ans=0;
    while(bfs())
    {
        int tmp;
        while(tmp=dfs(0,inf))
        {ans+=tmp;}
    }
    return ans;
}
int main()
{
    std::ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	while(cin>>n>>np>>nc>>m)
    {
        memset(tic,0,sizeof(tic));
        while(m--)
        {
            int from,to,c;
            char a;
            cin>>a>>from>>a>>to>>a>>c;
            tic[++from][++to]+=c;
        }
        while(np--)
        {
            int from,to,c;
            char a;
            cin>>a>>from>>a>>c;
            tic[0][++from]+=c;
        }
        while(nc--)
        {
            int from,to,c;
            char a;
            cin>>a>>from>>a>>c;
            tic[++from][n+1]+=c;
        }
        cout<<dinic()<<endl;
    }
}
原文地址:https://www.cnblogs.com/lhclqslove/p/7816135.html