<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      luogu 1344

      首先題意就是裸的最小割啦

      然后考慮如何統計邊數

      這里有一個trick:

      我們設定一個大于$m$的閾值,對于每條邊的邊權我們乘這個閾值+1后跑最小割,得到的答案除以閾值就是真正的最小割,取模閾值后就是最少割掉的邊數

      為什么?

      我們考慮:設原來的最小割割掉的邊權為$v_{1},v_{2}...v_{n}$,那么乘閾值+1后割掉的邊權就是$v_{1}*lim+1,v_{2}*lim+1...v_{n}*lim+1$

      也就是$lim(v_{1}+v_{2}+...+v_{n})+n$

      注意到$lim$大于邊權,因此我們直接跑出最小割分解就是答案

      而且顯然,加一不會影響最小割的正確性

      貼代碼:

      #include <cstdio>
      #include <cmath>
      #include <cstring>
      #include <cstdlib>
      #include <iostream>
      #include <algorithm>
      #include <queue>
      #include <stack>
      #define ll long long
      using namespace std;
      const ll lim=5000;
      const ll inf=0x3f3f3f3f3f3f3f3fll;
      struct Edge
      {
          int nxt;
          int to;
          ll val;
      }edge[2005];
      int head[50];
      int dis[50];
      int cur[50];
      int cnt=1;
      int n,m;
      void add(int l,int r,ll w)
      {
          edge[cnt].nxt=head[l];
          edge[cnt].to=r;
          edge[cnt].val=w;
          head[l]=cnt++;
      }
      void dadd(int l,int r,ll w)
      {
          add(l,r,w),add(r,l,0);
      }
      int ide(int x)
      {
          return x&1?x+1:x-1;
      }
      bool bfs()
      {
          memcpy(cur,head,sizeof(head));
          memset(dis,0,sizeof(dis));
          dis[1]=1;
          queue <int> M;
          M.push(1);
          while(!M.empty())
          {
              int u=M.front();
              M.pop();
              for(int i=head[u];i;i=edge[i].nxt)
              {
                  int to=edge[i].to;
                  if(!dis[to]&&edge[i].val)dis[to]=dis[u]+1,M.push(to);
              }
          }    
          return dis[n];
      }
      ll dfs(int x,ll lim)
      {
          if(x==n)return lim;
          ll ret=0;
          for(int i=cur[x];i;i=edge[i].nxt)
          {
              cur[x]=i;
              int to=edge[i].to;
              if(edge[i].val&&dis[to]==dis[x]+1)
              {
                  ll temp=dfs(to,min(lim,edge[i].val));
                  if(temp)
                  {
                      ret+=temp;
                      lim-=temp;
                      edge[i].val-=temp;
                      edge[ide(i)].val+=temp;
                      if(!lim)return ret;
                  }
              }
          }
          return ret;
      }
      ll dinic()
      {
          ll ans=0;
          while(bfs())ans+=dfs(1,inf);
          return ans;
      }
      int main()
      {
          scanf("%d%d",&n,&m);
          for(int i=1;i<=m;i++)
          {
              int x,y;
              ll z;
              scanf("%d%d%lld",&x,&y,&z);
              z=z*lim+1;
              dadd(x,y,z);
          }
          ll s=dinic();
          printf("%lld %lld\n",s/lim,s%lim);
          return 0;
      }

       

      posted @ 2019-07-11 09:03  lleozhang  Views(152)  Comments(0)    收藏  舉報
      levels of contents
      主站蜘蛛池模板: 亚洲人成人日韩中文字幕| 国产午夜福利视频在线| 日韩区中文字幕在线观看| 国产亚洲一区二区三不卡| 欧美一区二区三区欧美日韩亚洲| 蜜桃视频无码区在线观看| 久久夜色精品国产亚洲a| 国产熟睡乱子伦视频在线播放| 久久婷婷五月综合色欧美| 中文字幕av日韩有码| 在线 欧美 中文 亚洲 精品| 太原市| 夜夜添狠狠添高潮出水| 国产亚洲国产精品二区| 精品亚洲精品日韩精品| 麻豆国产97在线 | 欧美| 精品亚洲国产成人av| 精品久久久久久亚洲综合网| 伊人久久大香线蕉综合观| 在线观看热码亚洲AV每日更新| 国产亚洲精品VA片在线播放| 国产一区二区三区自拍视频| 欧美成人黄在线观看| 亚洲av无码之国产精品网址蜜芽| 虎白女粉嫩尤物福利视频| 欧美一本大道香蕉综合视频| 国产精品熟妇视频国产偷人| 西丰县| 男女猛烈激情xx00免费视频| 久久婷婷综合色一区二区| 人人做人人澡人人人爽| 妖精视频亚州无吗高清版| 国精品无码一区二区三区在线蜜臀| 狠狠色噜噜狠狠狠777米奇小说| 国产一区二区三区av在线无码观看| 肥城市| 亚洲一区三区三区成人久| 永丰县| 亚洲国产精品综合久久2007 | 亚洲欧洲无码av电影在线观看| 亚洲熟妇自偷自拍另类|