青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Drainage Ditches
Hal Burch

Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This means that the clover is covered by water for awhile and takes quite a long time to regrow. Thus, Farmer John has built a set of drainage ditches so that Bessie's clover patch is never covered in water. Instead, the water is drained to a nearby stream. Being an ace engineer, Farmer John has also installed regulators at the beginning of each ditch, so he can control at what rate water flows into that ditch.

Farmer John knows not only how many gallons of water each ditch can transport per minute but also the exact layout of the ditches, which feed out of the pond and into each other and stream in a potentially complex network. Note however, that there can be more than one ditch between two intersections.

Given all this information, determine the maximum rate at which water can be transported out of the pond and into the stream. For any given ditch, water flows in only one direction, but there might be a way that water can flow in a circle.

PROGRAM NAME: ditch
INPUT FORMAT

Line 1:
Two space-separated integers, N (0 <= N <= 200) and M (2 <= M <= 200). N is the number of ditches that Farmer John has dug. M is the number of intersections points for those ditches. Intersection 1 is the pond. Intersection point M is the stream.

Line 2..N+1:
Each of N lines contains three integers, Si, Ei, and Ci. Si and Ei (1 <= Si, Ei <= M) designate the intersections between which this ditch flows. Water will flow through this ditch from Si to Ei. Ci (0 <= Ci <= 10,000,000) is the maximum rate at which water will flow through the ditch.

SAMPLE INPUT (file ditch.in)
5 4
1 2 40
1 4 20
2 4 20
2 3 30
3 4 10
OUTPUT FORMAT

One line with a single integer, the maximum rate at which water may emptied from the pond.

SAMPLE OUTPUT (file ditch.out)
50
最基本的網(wǎng)絡(luò)流
   1:  #include<iostream>
   2:  #include<fstream>
   3:  #include<string>
   4:  #include<vector>
   5:  #include<map>
   6:  #include<algorithm>
   7:  #include<sstream>
   8:  #include <cstring>
   9:  #include <queue>
  10:  using namespace std;
  11:  const int MAXN = 220;
  12:  const int infi = 0x7FFFFFFF;
  13:   int capacity[MAXN][MAXN], prenode[MAXN], flow[MAXN];
  14:   queue<int> mq; 
  15:   
  16:  int start, end, N;
  17:  void init(){
  18:      freopen("ditch.in","r",stdin);
  19:      //freopen("e:\\usaco\\ditch.in","r",stdin);
  20:      start = 1;  
  21:      scanf("%d %d",&N,&end); int c, s, t;
  22:      memset(capacity,0,sizeof(capacity));
  23:      for(int i=0;i<N;i++)
  24:      {
  25:          scanf("%d %d %d",&c,&s,&t);
  26:          capacity[c][s] += t; //兩個(gè)節(jié)點(diǎn)間不只有一條路
  27:      } 
  28:  }
  29:  int bfs(){//尋找增廣路徑
  30:      while(!mq.empty()) mq.pop(); 
  31:      mq.push(start);  //源節(jié)點(diǎn)入隊(duì)
  32:      //memset(flow,0,sizeof(flow));
  33:      memset(prenode,-1,sizeof(prenode)); //重置前向節(jié)點(diǎn)
  34:      prenode[start] = 0; flow[start]=infi; //源節(jié)點(diǎn)流量無限大
  35:      while(!mq.empty()){
  36:          int cur = mq.front(); 
  37:          mq.pop();
  38:          if(cur == end) break; //到達(dá)匯點(diǎn)結(jié)束路徑 
  39:          for(int i=1;i<=end;i++){ 
  40:              if(prenode[i]==-1 && capacity[cur][i]) //訪問當(dāng)前節(jié)點(diǎn)所有未訪問的相鄰節(jié)點(diǎn),更新flow
  41:              {
  42:                  prenode[i] = cur;
  43:                  flow[i] = (flow[cur]<capacity[cur][i]?flow[cur]:capacity[cur][i]);
  44:                  mq.push(i);
  45:              }
  46:          }
  47:      }
  48:      if(prenode[end]==-1)  //如果未找到增廣路徑返回-1
  49:          return -1;
  50:      return flow[end];
  51:  }
  52:  int Edmonds_Karp(){
  53:      int total = 0, pathcapacity;//pathcapacity 路徑增加量
  54:      while((pathcapacity = bfs()) != -1){//可以找到增廣路徑時(shí)候進(jìn)行循環(huán)
  55:          int cur = end;    //從匯點(diǎn)開始增加逆向節(jié)點(diǎn)
  56:          while( cur != start ){
  57:              int t = prenode[cur] ;
  58:              capacity[t][cur] -= pathcapacity;
  59:              capacity[cur][t] += pathcapacity;
  60:              cur = t;
  61:          }
  62:          total += pathcapacity;//max_flow
  63:      }
  64:      return total;
  65:  }
  66:  void output(){
  67:      freopen("ditch.out","w",stdout);
  68:      //freopen("c:\\usaco\\ditch.out","w",stdout);
  69:      cout<<Edmonds_Karp()<<endl;
  70:  } 
  71:     int main()
  72:  {
  73:      init();  
  74:      output();
  75:      return 0;
  76:  }

標(biāo)程:使用貪心法,尋找一條增廣路徑的時(shí)候不斷尋找cap最大的,未被訪問的節(jié)點(diǎn)mloc;然后更新跟mloc相鄰的節(jié)點(diǎn)flow以

及prenode信息.最后當(dāng)運(yùn)行到end時(shí)候,更新路徑節(jié)點(diǎn)capacity,同時(shí)增加max_flow.重復(fù)上述過程直到找不到增廣路徑

   1:  #include <stdio.h>
   2:  #include <string.h>
   3:   
   4:  #define MAXI 200
   5:   
   6:  /* total drain amount between intersection points */
   7:  int drain[MAXI][MAXI];
   8:  int nint; /* number of intersection points */
   9:   
  10:  int cap[MAXI]; /* amount of flow that can get to each node */
  11:  int vis[MAXI]; /* has this node been visited by Dijkstra's yet? */
  12:  int src[MAXI]; /* the previous node on the path from the source to here */
  13:   
  14:  int augment(void)
  15:   { /* run a Dijkstra's varient to find maximum augmenting path */
  16:    int lv;
  17:    int mloc, max;
  18:    int t;
  19:   
  20:    memset(cap, 0, sizeof(cap));
  21:    memset(vis, 0, sizeof(vis));
  22:   
  23:    cap[0] = 2000000000;
  24:    while (1)
  25:     {
  26:      /* find maximum unvisited node */
  27:      max = 0;
  28:      mloc = -1;
  29:      for (lv = 0; lv < nint; lv++)
  30:        if (!vis[lv] && cap[lv] > max)
  31:         {
  32:          max = cap[lv];
  33:      mloc = lv;
  34:         }
  35:      if (mloc == -1) return 0;
  36:      if (mloc == nint-1) break; /* max is the goal, we're done */
  37:   
  38:      vis[mloc] = -1; /* mark as visited */
  39:   
  40:      /* update neighbors, if going through this node improves the
  41:         capacity */
  42:      for (lv = 0; lv < nint; lv++)
  43:        if (drain[mloc][lv] > cap[lv] && max > cap[lv])
  44:         {
  45:          cap[lv] = drain[mloc][lv];
  46:      if (cap[lv] > max) cap[lv] = max;
  47:      src[lv] = mloc;
  48:         }
  49:     }
  50:    max = cap[nint-1];
  51:   
  52:    /* augment path, starting at end */
  53:    for (lv = nint-1; lv > 0; lv = src[lv])
  54:     {
  55:      t = src[lv];
  56:      drain[t][lv] -= max;
  57:      drain[lv][t] += max;
  58:     }
  59:    return max;
  60:   }
  61:   
  62:  int main(int argc, char **argv)
  63:   {
  64:    FILE *fout, *fin;
  65:    int lv;
  66:    int num;
  67:    int p1, p2, c;
  68:   
  69:    if ((fin = fopen("ditch.in", "r")) == NULL)
  70:     {
  71:      perror ("fopen fin");
  72:      exit(1);
  73:     }
  74:    if ((fout = fopen("ditch.out", "w")) == NULL)
  75:     {
  76:      perror ("fopen fout");
  77:      exit(1);
  78:     }
  79:   
  80:    fscanf (fin, "%d %d", &num, &nint);
  81:    while (num--)
  82:     {
  83:      fscanf (fin, "%d %d %d", &p1, &p2, &c);
  84:      p1--;
  85:      p2--;
  86:      drain[p1][p2] += c; /* note += handles two ditches between same points */
  87:     }
  88:   
  89:    /* max flow algorithm: augment while you can */
  90:    c = 0;
  91:    while ((p1 = augment()))
  92:      c += p1;
  93:    fprintf (fout, "%d\n", c);
  94:    return 0;
  95:   }

 

 

 

 

 

 

 

 

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            嫩草影视亚洲| 午夜欧美视频| 亚洲一区二区三区四区五区黄| 国内精品免费在线观看| 亚洲欧美一区二区三区在线| 亚洲综合精品四区| 久久亚洲综合| 亚洲国产经典视频| 亚洲国产成人久久| 欧美一区二区三区四区在线观看| 久久久久综合网| 国模精品一区二区三区色天香| 亚洲综合色网站| 亚洲二区在线观看| 亚洲精品一区在线| 欧美一区二区三区四区高清| 午夜精品成人在线视频| 国产欧美一区二区精品秋霞影院 | 午夜视频在线观看一区二区| 欧美系列精品| 亚洲一区免费| 久久久久国产精品人| 欧美精品不卡| 午夜精品一区二区三区在线视| 久久gogo国模啪啪人体图| 亚洲日本免费电影| 国产精品成人在线观看| 亚洲女同精品视频| 欧美高清视频免费观看| 在线综合亚洲| 国产区二精品视| 免费在线成人av| 经典三级久久| 欧美精品久久久久久久| 香港久久久电影| 亚洲精品国产精品乱码不99按摩| 欧美日韩国产欧| 猛男gaygay欧美视频| 一区二区三区视频观看| 老司机午夜精品视频| 久久xxxx精品视频| 久久综合给合| 欧美金8天国| 欧美成人精品一区| 国产亚洲综合性久久久影院| 99re热这里只有精品视频| 亚洲国产精品一区二区www| 久久精品日韩一区二区三区| 欧美影院久久久| 国产精品美女主播在线观看纯欲| 在线视频亚洲欧美| 亚洲视频你懂的| 欧美色另类天堂2015| 一本色道**综合亚洲精品蜜桃冫| 一区二区三区高清不卡| 欧美精品91| 日韩亚洲欧美成人| 亚洲一二三四久久| 欧美三区不卡| 亚洲影视在线播放| 久久久免费精品| 原创国产精品91| 欧美11—12娇小xxxx| 亚洲国产精品一区在线观看不卡| 亚洲国产经典视频| 欧美激情第六页| 99视频在线精品国自产拍免费观看 | 亚洲日韩欧美视频一区| 在线成人www免费观看视频| 久久久久久久综合色一本| 蜜臀久久99精品久久久久久9 | 亚洲毛片在线| 午夜精品www| 伊人精品成人久久综合软件| 蜜月aⅴ免费一区二区三区 | 亚洲精品国产精品国自产观看浪潮| 免费在线播放第一区高清av| 日韩视频一区二区| 欧美一区三区二区在线观看| 激情综合网激情| 欧美日韩天堂| 久久精品成人一区二区三区| 亚洲国产欧美在线人成| 亚洲欧美成人一区二区在线电影| 国产一区二区三区在线免费观看| 免费看的黄色欧美网站| 亚洲一区在线看| 欧美电影免费网站| 亚洲综合色在线| 在线免费观看日韩欧美| 国产精品大全| 欧美在线免费看| 免费视频一区二区三区在线观看| 亚洲第一福利视频| 亚洲图片欧美午夜| 欧美二区不卡| 亚洲第一精品夜夜躁人人爽 | 亚洲精品小视频在线观看| 欧美大尺度在线| 一区二区三区回区在观看免费视频| 欧美在线观看天堂一区二区三区| 1024国产精品| 国产精品日韩一区| 欧美高清不卡| 久久久国产精品一区二区中文 | 日韩一二三区视频| 国产欧美一区二区三区国产幕精品| 美女在线一区二区| 西瓜成人精品人成网站| 99人久久精品视频最新地址| 欧美大片91| 欧美专区在线| 亚洲欧美一区二区三区在线 | 麻豆成人在线| 欧美在线观看网址综合| 一区二区日韩欧美| 亚洲国产精品一区二区尤物区 | 欧美体内she精视频| 久久夜色精品国产欧美乱| 亚洲图片在线观看| 亚洲精品乱码久久久久久| 欧美电影资源| 久久一区二区三区国产精品| 亚洲欧美国产77777| 一本色道久久综合亚洲二区三区| 精品99视频| 国模私拍一区二区三区| 国产欧美三级| 国产色爱av资源综合区| 国产精品入口尤物| 国产精品视频一| 国产精品老牛| 国产精品日韩一区二区| 国产精品日韩二区| 国产欧美日韩在线播放| 国产日韩专区| 精品88久久久久88久久久| 一区二区在线视频观看| 黄色成人精品网站| 激情视频亚洲| 亚洲国产日韩欧美综合久久| 亚洲高清久久久| 国产精品久线观看视频| 亚洲福利视频二区| 国产视频观看一区| 亚洲综合色自拍一区| 久久精品国产99国产精品澳门| 亚洲一区二区三区影院| 久久久精品午夜少妇| 欧美中文字幕在线观看| 欧美片在线播放| 久久精品日韩欧美| 国产精品午夜在线观看| 一本色道久久加勒比88综合| 亚洲电影有码| 午夜欧美视频| 欧美一区二区三区免费视| 欧美成人黄色小视频| 牛牛影视久久网| 国产亚洲精品久久飘花| 一本久道久久综合狠狠爱| 一本到12不卡视频在线dvd| 欧美1级日本1级| 亚洲人成免费| 午夜一级在线看亚洲| 国产精品欧美久久| 欧美一级片一区| 久久亚洲欧美| 亚洲裸体视频| 国产精品日韩欧美一区二区三区| 99re这里只有精品6| 欧美成人午夜免费视在线看片| 国产午夜精品美女视频明星a级| 老鸭窝91久久精品色噜噜导演| 亚洲毛片播放| 欧美午夜精品一区| 99国产精品久久| 午夜欧美大尺度福利影院在线看| 亚洲午夜久久久久久久久电影院| 久久青草欧美一区二区三区| 亚洲永久免费精品| 亚洲精品少妇| 欧美一级专区| 欧美伦理影院| 国产一区二区中文字幕免费看| 在线观看日韩精品| 亚洲素人在线| 蜜臀99久久精品久久久久久软件| 亚洲人成艺术| 欧美在线播放| 亚洲综合色丁香婷婷六月图片| 久久综合九色综合久99| 亚洲在线视频网站| 最新成人av网站| 91久久精品国产| 国产精品视区| 国产精品丝袜91| 国产麻豆9l精品三级站| 欧美一区激情视频在线观看| 亚洲一区二区三区中文字幕在线 |