设为首页 加入收藏

TOP

hdu3549Flow Problem 最大流模板水题
2015-11-21 00:55:34 来源: 作者: 【 】 浏览:1
Tags:hdu3549Flow Problem 最大 模板 水题
#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<
        
       
      
     
    
   

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇UVALive 7043 International Coll.. 下一篇POJ2104-K-th Number-求区间第K大..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: