程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> hdu3549Flow Problem 最大流模板水題

hdu3549Flow Problem 最大流模板水題

編輯:關於C++
#include
#include
#include
#include
using namespace std ;
const int maxn = 1010 ;
const int inf = 0x7fffffff ;
int dis[maxn] ;int st ,en;
int head[maxn] , nedge ;
int n , m;
struct Edge
{
    int v , w ;
    int next ;
}edge[maxn<<1] ;
void addedge(int u , int v , int w)
{
    edge[nedge].v = v ;
    edge[nedge].w = w ;
    edge[nedge].next = head[u] ;
    head[u] = nedge++ ;
    edge[nedge].v = u ;
    edge[nedge].w = 0 ;
    edge[nedge].next = head[v] ;
    head[v] = nedge++ ;
}
bool bfs()
{
    queue que ;
    memset(dis , -1 ,sizeof(dis)) ;
    dis[st] = 0 ;
    que.push(st) ;
    while(que.size())
    {
        int u = que.front() ;
        que.pop() ;
        for(int i = head[u]; i != -1 ; i = edge[i].next)
        {
            int v = edge[i].v ;
            if(edge[i].w > 0 && dis[v] < 0)
            {
                dis[v] = dis[u] + 1 ;
                que.push(v) ;
            }
        }
    }
    if(dis[en] > 0)
    return true ;
    return false ;
}
int dfs(int u , int mx)
{
    if(u == en)
    return mx ;
    int a ;
    for(int i = head[u] ;i != -1 ;i = edge[i].next)
    {
        int v = edge[i].v ;
        if(dis[v] == dis[u] + 1 && edge[i].w > 0 && (a = dfs(v ,min(mx , edge[i].w))))
        {
            edge[i].w -= a ;
            edge[i^1].w += a ;
            return a ;
        }
    }
    return 0 ;
}
int main()
{
    int t ;
    int cas = 0 ;
    scanf(%d , &t) ;
    while(t--)
    {
        scanf(%d%d , &n , &m) ;
        memset(head , -1 , sizeof(head)) ;
        nedge = 0 ;
        while(m--)
        {
            int u , v , w;
            scanf(%d%d%d , &u , &v , &w) ;
            addedge(u , v , w) ;
        }
        int ans = 0 ;
        int res ;
        st = 1 , en = n ;
        while(bfs())
          while(res = dfs(1 , inf))
           ans += res ;
        printf(Case %d:  ,++cas) ;
        cout<

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved