日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【USACO15DEC】最大流Max Flow

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【USACO15DEC】最大流Max Flow 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題面

FJ給他的牛棚的N(2≤N≤50,000)個隔間之間安裝了N-1根管道,隔間編號從1到N。所有隔間都被管道連通了。

FJ有K(1≤K≤100,000)條運輸牛奶的路線,第i條路線從隔間si運輸到隔間ti。一條運輸路線會給它的兩個端點處的隔間以及中間途徑的所有隔間帶來一個單位的運輸壓力,你需要計算壓力最大的隔間的壓力是多少。

分析

樹上點差分模板。

代碼

  • #include<bits/stdc++.h>??
  • using?namespace?std;??
  • #define?N?500050??
  • int?n,m,cnt,ans;??
  • int?c[N],fa[N][20],dep[N],first[N];??
  • struct?email??
  • {??
  • ????int?u,v;??
  • ????int?nxt;??
  • }e[N*4];??
  • template<class?T>??
  • inline?void?read(T?&x)??
  • {??
  • ????x=0;int?f=1;static?char?c=getchar();???
  • ????while(c<'0'||c>'9')?{if(c=='-')f=-1;c=getchar();}??
  • ????while(c>='0'&&c<='9'){x=x*10+c-'0',c=getchar();}??
  • ????x*=f;??
  • }??
  • ??
  • inline?void?add(int?u,int?v)??
  • {??
  • ????e[++cnt].nxt=first[u];first[u]=cnt;??
  • ????e[cnt].u=u;e[cnt].v=v;??
  • }??
  • ??
  • inline?void?pre(int?u,int?f)??
  • {??
  • ????for(int?i=1;(1<<i)<=dep[u];i++)??
  • ????????fa[u][i]=fa[fa[u][i-1]][i-1];??
  • ????for(int?i=first[u];i;i=e[i].nxt)??
  • ????{??
  • ????????int?v=e[i].v;??
  • ????????if(v==f)continue;??
  • ????????dep[v]=dep[u]+1;??
  • ????????fa[v][0]=u;??
  • ????????pre(v,u);??
  • ????}?????
  • }??
  • ??
  • inline?int?lca(int?x,int?y)??
  • {??
  • ????if(dep[x]<dep[y])swap(x,y);??
  • ????int?t=dep[x]-dep[y];??
  • ????for(int?i=0;(1<<i)<=t;i++)??
  • ????????if((1<<i)&t)??
  • ????????????x=fa[x][i];??
  • ????if(x==y)return?x;??
  • ????for(int?i=19;i>=0;i--)??
  • ????????if(fa[x][i]!=fa[y][i])??
  • ????????????x=fa[x][i],y=fa[y][i];??
  • ????return?fa[x][0];??
  • }??
  • ??
  • inline?void?dfs(int?u,int?f)??
  • {??
  • ????for(int?i=first[u];i;i=e[i].nxt)??
  • ????{??
  • ????????int?v=e[i].v;??
  • ????????if(v==f)continue;??
  • ????????dfs(v,u);??
  • ????????c[u]+=c[v];??
  • ????}??
  • ????ans=max(ans,c[u]);??
  • }??
  • ??
  • int?main()??
  • {??
  • ????read(n),read(m);??
  • ????for(int?i=1;i<n;i++)??
  • ????{??
  • ????????int?u,v;??
  • ????????read(u),read(v);??
  • ????????add(u,v);add(v,u);??
  • ????}??
  • ????pre(1,0);??
  • ????for(int?i=1;i<=m;i++)??
  • ????{??
  • ????????int?s,t;??
  • ????????read(s),read(t);??
  • ????????c[s]++,c[t]++,c[lca(s,t)]--,c[fa[lca(s,t)][0]]--;??
  • ????}??
  • ????dfs(1,0);??
  • ????printf("%d\n",ans);??
  • ????return?0;??
  • ??????
  • }??
  • 轉載于:https://www.cnblogs.com/NSD-email0820/p/9853237.html

    總結

    以上是生活随笔為你收集整理的【USACO15DEC】最大流Max Flow的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。