zoukankan      html  css  js  c++  java
  • hdu 3549 Flow Problem 【最大流】

    其实还是不是很懂dinic-----

    抄了一个模板---

    http://www.cnblogs.com/naturepengchen/articles/4403408.html

    先放在这里~~~

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<queue>
     6 using namespace std;
     7 
     8 const int maxn = 10005;
     9 const int INF = (1 << 30) - 1;
    10 
    11 struct Edge{
    12     int v,next,c;
    13 }e[maxn];
    14 
    15 int st,ed,lev[maxn],first[maxn],now[maxn],ecnt;
    16 int n,m;
    17 
    18 void init(int a,int b){
    19     st = a; ed = b;
    20     memset(first,-1,sizeof(first));
    21     ecnt = 0;
    22 }
    23 
    24 void addedges(int u,int v,int c){
    25     e[ecnt].next = first[u];
    26     e[ecnt].v = v;
    27     e[ecnt].c = c;
    28     first[u] = ecnt++;
    29     
    30     e[ecnt].next = first[v];
    31     e[ecnt].v = u;
    32     e[ecnt].c = 0;
    33     first[v] = ecnt++;
    34 }
    35 
    36 bool bfs(){
    37     queue<int> q;
    38     while(!q.empty()) q.pop();
    39     q.push(st);
    40     memset(lev,-1,sizeof(lev));
    41     lev[st] = 0;
    42     while(!q.empty()){
    43         int x = q.front();q.pop();
    44         for(int i = first[x];~i;i = e[i].next){
    45             int v = e[i].v;
    46             if(lev[v] < 0 && e[i].c > 0){
    47                 lev[v] = lev[x] + 1;
    48                 q.push(v);
    49             }
    50         }
    51     }
    52     return lev[ed] != -1;
    53 }
    54 
    55 int dfs(int p,int minf){
    56     if(p == ed || minf == 0) return minf;
    57     for(int &i = now[p];~i;i = e[i].next){
    58         int v = e[i].v;
    59         if(lev[v] == lev[p] + 1 && e[i].c > 0){
    60             int d = dfs(v,min(e[i].c,minf));
    61             if(d > 0){
    62                 e[i].c -= d;
    63                 e[i^1].c += d;
    64                 return d;
    65             }
    66         }
    67     }
    68     return 0;
    69 }
    70 
    71 int dinic(){
    72     int max_flow = 0,p1;
    73     while(bfs()){
    74         memcpy(now,first,sizeof(first));
    75         while((p1 = dfs(st,INF)) > 0)
    76         max_flow += p1;
    77     }
    78     return max_flow;
    79 }
    80 
    81 int main(){
    82     int T;
    83     int kase = 0;
    84     scanf("%d",&T);
    85     while(T--){        
    86         scanf("%d %d",&n,&m);
    87         init(1,n);
    88         for(int i = 0;i < m;i++){
    89             int a,b,c;
    90             scanf("%d %d %d",&a,&b,&c);
    91             addedges(a,b,c);
    92         }
    93         printf("Case %d: %d
    ",++kase,dinic());
    94     }
    95     return 0;
    96 }
    View Code
  • 相关阅读:
    vue路由对象($route)参数简介
    原生js写ajax请求(复习)
    js,jq.事件代理(事件委托)复习。
    CSS 设置table下tbody滚动条
    H5 调用手机摄像机、相册功能
    css实现六边形图片(最简单易懂方法实现高逼格图片展示)
    input表单的type属性详解,不同type不同属性之间区别
    js对象,set和get方法 的三种实现形式
    day03 变量
    day01 js三种导入html的方法、js书写规范、变量的基本使用、变量提升
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4707148.html
Copyright © 2011-2022 走看看