zoukankan      html  css  js  c++  java
  • HDU 1532

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532

    题意: 

    三叶草是这个人的最喜欢的植物,结果下雨淹没了他家里,要排水,一个点到一个点的排水速度已知,求最大排水能力。

    我仔细看了题面,好像是没有具体说明起点和终点。

    所以我用最大流,枚举起点终点,并且清流,当然我知道还是可能超时的。

    看了一下网上的解答,硬说起点是 1 ,终点 m,我也是很迷啊~~~

      1 #include <bits/stdc++.h>
      2 
      3 using namespace std;
      4 
      5 const int maxn = 205;
      6 const int INF = 0x3f3f3f3f;
      7 
      8 struct Edge {
      9     int from,to,cap,flow;
     10 };
     11 
     12 struct Dinic {
     13 
     14     int n,m,s,t;
     15     vector<Edge> edges;
     16     vector<int> G[maxn];
     17     bool vis[maxn];
     18     int d[maxn];
     19     int cur[maxn];
     20 
     21     void init(int n) {
     22         this->n = n;
     23         for(int i=0;i<n;i++)
     24             G[i].clear();
     25         edges.clear();
     26     }
     27 
     28     void clearflow() {
     29         for(int i=0;i<edges.size();i++)
     30             edges[i].flow = 0;
     31     }
     32 
     33 
     34     void AddEdge(int from,int to,int cap) {
     35         edges.push_back((Edge){from,to,cap,0});
     36         edges.push_back((Edge){to,from,0,0});
     37         m = edges.size();
     38         G[from].push_back(m-2);
     39         G[to].push_back(m-1);
     40     }
     41 
     42     bool BFS() {
     43         memset(vis,0,sizeof(vis));
     44         queue<int> Q;
     45         Q.push(s);
     46         vis[s] = 1;
     47         while(!Q.empty()) {
     48             int x = Q.front();Q.pop();
     49             for(int i=0;i<G[x].size();i++) {
     50                 Edge& e = edges[G[x][i]];
     51                 if(!vis[e.to]&&e.cap>e.flow) {
     52                     vis[e.to] = 1;
     53                     d[e.to] = d[x] + 1;
     54                     Q.push(e.to);
     55                 }
     56             }
     57         }
     58         return vis[t];
     59     }
     60 
     61 
     62     int DFS(int x,int a) {
     63         if(x==t||a==0) return a;
     64         int flow = 0,f;
     65         for(int& i=cur[x];i<G[x].size();i++) {
     66             Edge& e = edges[G[x][i]];
     67             if(d[x]+1==d[e.to]&&(f=DFS(e.to,min(a,e.cap-e.flow)))>0) {
     68                 e.flow +=f;
     69                 edges[G[x][i]^1].flow -=f;
     70                 flow+=f;
     71                 a-=f;
     72                 if(a==0) break;
     73             }
     74         }
     75         return flow;
     76     }
     77 
     78     int Maxflow(int s,int t) {
     79         this->s = s;this->t = t;
     80         int flow = 0;
     81         while(BFS()) {
     82             memset(cur,0,sizeof(cur));
     83             flow+=DFS(s,INF);
     84         }
     85         return flow;
     86     }
     87 
     88 
     89 }sol;
     90 
     91 int main()
     92 {
     93     int n,m;
     94     while(~scanf("%d%d",&n,&m)) {
     95         sol.init(n);
     96         for(int i=0;i<n;i++) {
     97             int u,v,c;
     98             scanf("%d%d%d",&u,&v,&c);
     99             u--;
    100             v--;
    101             sol.AddEdge(u,v,c);
    102         }
    103 
    104        // int ans = -1;
    105        // for(int s=0;s<m;s++) {
    106        //     for(int t=s+1;t<m;t++) {
    107        //         sol.clearflow();
    108        //         ans = max(ans,sol.Maxflow(s,t));
    109        //     }
    110        // }
    111 
    112        // int ans = sol.Maxflow(0,m-1);
    113 
    114       // int s = m,t=m+1;
    115        //for(int i=0;i<m;i++) {
    116        //     sol.AddEdge(s,i,INF);
    117       //      sol.AddEdge(i,t,INF);
    118        //}
    119 
    120        printf("%d
    ",sol.Maxflow(0,m-1));
    121 
    122        // printf("%d
    ",ans);
    123 
    124     }
    125     return 0;
    126 }
    View Code
  • 相关阅读:
    HDU 1711
    HDU 4135
    HDU 4462
    HDU 1969
    flask的nocache防止js不刷新
    python2.x里unicode错误问题
    使用SwingWork反而阻塞SwingUI
    利用JProfile 7分析内存OOM
    编译android的一些坑
    java jmenu的替代方案
  • 原文地址:https://www.cnblogs.com/TreeDream/p/6670920.html
Copyright © 2011-2022 走看看