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

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>
            欧美日韩国产精品成人| 国产伦精品一区二区三区高清| 国产精品草草| 亚洲免费影院| 久久久国产91| 中文日韩在线视频| 亚洲天堂av在线免费观看| 国产精品乱人伦中文| 久久久久在线| 欧美大片18| 亚洲自拍偷拍网址| 久久久久久9| 一区二区三区视频在线| 小黄鸭精品密入口导航| 亚洲精品少妇30p| 亚洲一区二区高清| 伊人婷婷欧美激情| 久久久青草婷婷精品综合日韩| 午夜精品久久久久久久99热浪潮| 亚洲丁香婷深爱综合| 一区二区三区欧美日韩| 亚洲第一页自拍| 亚洲欧美一区二区视频| 99re6热只有精品免费观看| 久久av老司机精品网站导航| 在线视频欧美日韩| 欧美91视频| 久久国产精品网站| 欧美日韩一区二区在线观看| 欧美a级理论片| 国产一区二区三区在线观看精品| 夜夜嗨av一区二区三区网站四季av| 亚洲免费视频观看| 99re6这里只有精品视频在线观看| 久久久久久尹人网香蕉| 亚欧美中日韩视频| 欧美日韩一区二区三区免费看| 欧美成人在线免费观看| 国产一区二区激情| 午夜亚洲福利| 欧美一区二区黄色| 国产精品久久久久久久久免费桃花| 亚洲高清视频一区| 欧美好吊妞视频| 国产精品久久午夜| 亚洲欧美日韩网| 亚洲激情校园春色| 中文精品一区二区三区| 欧美亚洲免费| 欧美日韩亚洲一区三区| 欧美久久精品午夜青青大伊人| 欧美日本成人| 有坂深雪在线一区| 亚洲一区二区在线免费观看| 老色鬼精品视频在线观看播放| 亚洲久久视频| 欧美va亚洲va日韩∨a综合色| 欧美日韩在线观看视频| 亚洲黄色免费网站| 麻豆成人av| 性做久久久久久免费观看欧美 | 欧美区在线播放| 黑人操亚洲美女惩罚| 性欧美暴力猛交69hd| 在线天堂一区av电影| 欧美日本国产一区| 亚洲精品一区在线观看| 亚洲国产成人精品女人久久久| 巨胸喷奶水www久久久免费动漫| 激情婷婷久久| 久久婷婷影院| 久久一区欧美| 一本色道久久综合狠狠躁的推荐| 国产精品视频导航| 日韩亚洲一区二区| 免费成人小视频| 久久国内精品视频| 国产一区二区电影在线观看 | 亚洲国产精品成人| 农村妇女精品| 欧美肥婆bbw| 一区二区三区四区五区视频 | 亚洲日本成人女熟在线观看| 欧美99久久| 一本大道久久a久久精品综合| 91久久黄色| 国产精品一区=区| 久久夜色精品国产欧美乱极品| 久久男人资源视频| 亚洲人成啪啪网站| 亚洲国产高清在线观看视频| 欧美国产日韩a欧美在线观看| 欧美不卡福利| 亚洲欧美在线aaa| 久久久噜噜噜久久| 亚洲少妇中出一区| 午夜久久资源| 99re6这里只有精品视频在线观看 99re6这里只有精品 | 欧美三级乱码| 久久国产精品亚洲77777| 久久久免费av| 亚洲在线第一页| 久久福利资源站| 99精品国产高清一区二区| 亚洲欧美国产不卡| 在线观看欧美黄色| 亚洲午夜高清视频| 亚洲激情啪啪| 亚洲字幕在线观看| 亚洲美女精品成人在线视频| 亚洲在线免费观看| 99热精品在线| 久久九九精品99国产精品| 亚洲精品偷拍| 欧美在线视频观看免费网站| 亚洲国产91| 中文无字幕一区二区三区| 日韩一二三在线视频播| 欧美精品国产精品日韩精品| 午夜精品国产更新| 亚洲图片你懂的| 亚洲欧美激情视频在线观看一区二区三区| 老司机一区二区三区| 伊人成人在线视频| 免费观看欧美在线视频的网站| 欧美一区二区性| 欧美揉bbbbb揉bbbbb| 在线一区二区三区做爰视频网站| 欧美精品尤物在线| 久久不射中文字幕| 亚洲综合不卡| **欧美日韩vr在线| 亚洲人成77777在线观看网| 欧美日韩在线视频一区二区| 亚洲欧美日韩一区在线观看| 亚洲第一在线视频| 欧美刺激性大交免费视频| 亚洲三级色网| 亚洲一区二区不卡免费| 国语自产精品视频在线看8查询8| 亚洲国产成人久久综合| 欧美日韩第一区| 在线成人免费视频| 久久久久久久久久久久久女国产乱| 久久一区二区三区av| 亚洲视频香蕉人妖| 久久综合中文字幕| 国产一区高清视频| 性做久久久久久免费观看欧美| 91久久精品美女高潮| 国产精品视频大全| 久久久一二三| 欧美精品一区二区三区高清aⅴ| 亚洲黄一区二区三区| 亚洲免费福利视频| 久久久国际精品| 国产精品日本欧美一区二区三区| 久久久视频精品| 国产精品国产精品| 亚洲国产欧美日韩另类综合| 国产精品三级视频| 女生裸体视频一区二区三区| 久久精品国产欧美亚洲人人爽| 欧美性色aⅴ视频一区日韩精品| 黄色亚洲网站| 亚洲深夜激情| 欧美一级播放| 亚洲专区免费| 欧美成人精品在线| 久久成人一区二区| 国产伦精品一区二区三区在线观看 | 一区二区三区高清在线| 亚洲国产cao| 欧美伦理影院| 在线欧美小视频| 午夜精品一区二区三区四区| 99成人免费视频| 另类激情亚洲| 免费在线亚洲欧美| 精品不卡视频| 欧美在线视频免费观看| 欧美日韩综合久久| 99综合电影在线视频| 久久精品国产99精品国产亚洲性色| 亚洲精品一区二区三区福利| 欧美亚洲系列| 久久国产精品99国产| 国产精品视频99| 亚洲一区二区三区免费在线观看| 91久久久久久久久| 久久伊人精品天天| 国产精品女人毛片| 亚洲免费一在线| 欧美午夜不卡在线观看免费| 亚洲一区二区三区四区视频| 亚洲国产精品第一区二区| 老司机一区二区三区| 欧美电影打屁股sp| 在线观看不卡| 欧美精品97|