• 51nod 1442 士兵的旅行


    拆点,因为只能走一步,那么u->v 后就不能到k了,这样,建图就能保证只走一步;

      1 #include <bits/stdc++.h>
      2 
      3 using namespace std;
      4 
      5 const int maxn = 105*2;
      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> edge;
     16     vector<int> G[maxn];
     17     bool vis[maxn];
     18     int d[maxn];
     19     int cur[maxn];
     20 
     21     void init()
     22     {
     23         for(int i=0;i<maxn;i++)
     24             G[i].clear();
     25         edge.clear();
     26         memset(d,0,sizeof(d));
     27         memset(vis,0,sizeof(vis));
     28         memset(cur,0,sizeof(cur));
     29     }
     30 
     31     void addEdge (int from,int to,int cap)
     32     {
     33         edge.push_back((Edge){from,to,cap,0});
     34         edge.push_back((Edge){to,from,0,0});
     35         m = edge.size();
     36         G[from].push_back(m-2);
     37         G[to].push_back(m-1);
     38     }
     39 
     40     bool BFS()
     41     {
     42         memset(vis,0,sizeof(vis));
     43         queue<int> Q;
     44         Q.push(s);
     45         d[s] = 0;
     46         vis[s] = 1;
     47         while(!Q.empty())
     48         {
     49             int x = Q.front();
     50             Q.pop();
     51             for(int i=0; i<G[x].size(); i++)
     52             {
     53                 Edge & e = edge[G[x][i]];
     54                 if(!vis[e.to]&&e.cap>e.flow)
     55                 {
     56                     vis[e.to] = 1;
     57                     d[e.to] = d[x] + 1;
     58                     Q.push(e.to);
     59                 }
     60             }
     61         }
     62         return vis[t];
     63     }
     64 
     65     int DFS(int x,int a)
     66     {
     67         if(x==t||a==0) return a;
     68         int flow = 0,f;
     69         for(int & i = cur[x]; i<G[x].size(); i++)
     70         {
     71             Edge & e = edge[G[x][i]];
     72             if(d[x] + 1==d[e.to]&&(f=DFS(e.to,min(a,e.cap-e.flow)))>0)
     73             {
     74                 e.flow +=f;
     75                 edge[G[x][i]^1].flow -=f;
     76                 flow +=f;
     77                 a-=f;
     78                 if(a==0) break;
     79             }
     80         }
     81         return flow;
     82     }
     83 
     84     int Maxflow (int s,int t) {
     85         this->s = s;this->t = t;
     86         int flow = 0;
     87         while(BFS()) {
     88             memset(cur,0,sizeof(cur));
     89             flow+=DFS(s,INF);
     90         }
     91         return flow;
     92     }
     93 
     94 }sol;
     95 
     96 
     97 int main()
     98 {
     99     int n,m;
    100     scanf("%d%d",&n,&m);
    101 
    102     int s = 0;
    103     int t = 2*n+1;
    104 
    105     sol.init();
    106     int sum = 0;
    107     for(int i=1;i<=n;i++) {
    108         int a;
    109         scanf("%d",&a);
    110         sum +=a;
    111         sol.addEdge(s,i,a);
    112         sol.addEdge(i,i+n,INF);
    113     }
    114 
    115     int sum2 = 0;
    116     for(int i=1;i<=n;i++) {
    117         int a;
    118         scanf("%d",&a);
    119         sum2+=a;
    120         sol.addEdge(i+n,t,a);
    121     }
    122 
    123     for(int i=0;i<m;i++) {
    124         int u,v;
    125         scanf("%d%d",&u,&v);
    126         sol.addEdge(u,v+n,INF);
    127         sol.addEdge(v,u+n,INF);
    128     }
    129 
    130     int ans = sol.Maxflow(s,t);
    131     if(ans==sum&&sum2==sum)
    132         puts("YES");
    133     else puts("NO");
    134 
    135     return 0;
    136 }
    View Code
  • 相关阅读:
    C# Json数组序列化和反序列总结
    从Excel文件中读取内容
    JS replace()用法实现replaceAll
    JS 缓存
    JS 从HTML页面获取自定义属性值
    根据IP和端口号异步短时间判断服务器是否链接
    时间戳与时间相互转换(13位)(转)
    JS enter事件及数据不完整阻止下一步操作
    JS 检测浏览器中是否安装了特定的插件
    C# Cache 缓存
  • 原文地址:https://www.cnblogs.com/TreeDream/p/6979838.html
Copyright © 2020-2023  润新知