E - Flow Gym - 102471E

E - Flow Gym - 102471E

题意:

n个点,m条边,从点1到点n有k条相同长度的路径,每个边都有对应的容量,你可以进行任意次操作,每次将一个边的容量-1,将另一个边的容量+1,问最少操作多少次可以使得跑最大流的结果最大

题解:

很容易发现我们可以直接计算出最大流的最大值,因为我们有所有边的容量,极端操作我们可以将所有边的容量全部分配到一条路上,也就是最大流的最大值sum=所有流量综合一条路径的长度sum=\frac{所有流量综合}{一条路径的长度}sum=
如果我们不操作,当前的最大流答案为每条路径的最小值之和,不过当前这个最大流的答案要比理想的sum小,我们如何通过操作提升到sum?
刚才分析得出,最大流的结果和每一条路径的最小值有关,那我们就每次操作提升最小值即可。我们将每一条道路上的边按照容量排序(每条路之间彼此独立,没有影响),然后每一条路径的最小容量之和,就是当前最大流sum1,sum减sum1就是我们要补的量(也就是操作次数),补完后我们开始考虑每一条路径的次小值,之和sum2就是当前最新的网络流,与sum的差距就是再次要补的量。这样一直操作,直到最新的网络流容量大于等于sum
你可能要问我们知道被补的,那谁是被扣除的呢?其实不用管,因为我们已经求了sum,也就是总有操作可以使得最大流到sum,我们每次补可以认为是容量大的一些边均摊减,我们不需要知道具体的操作方案,只需要知道操作的影响和结果即可

代码:

#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\n", a, b);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
void read(){};
template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar)
{x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...);
}
template <typename T> inline void write(T x)
{if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
void rd_test()
{
#ifdef ONLINE_JUDGE
#elsestartTime = clock ();freopen("data.in", "r", stdin);
#endif
}
void Time_test()
{
#ifdef ONLINE_JUDGE
#elseendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
const int maxn=2e5+9;
vector<pair<int,ll> >vec[maxn];
vector<ll>v[maxn];
ll ans=0;
int main()
{//rd_test();int n,m;read(n,m);ll tot=0;for(int i=1;i<=m;i++){int x,y,w;read(x,y,w);vec[x].push_back({y,w});tot+=w;}int cnt=0;for(int i=0;i<vec[1].size();i++){cnt++;int tmp=vec[1][i].first;v[cnt].push_back(vec[1][i].second);while(tmp!=n){v[cnt].push_back(vec[tmp][0].second);tmp=vec[tmp][0].first;}}for(int i=1;i<=cnt;i++){sort(v[i].begin(),v[i].end());}ll k=m/cnt;ll ave=tot/k;for(int i=0;i<k;i++){ll sum=0;for(int j=1;j<=cnt;j++)sum+=v[j][i];ans+=max(0ll,ave-sum);}cout<<ans<<endl;//Time_test();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解读大内老A的《.NET Core框架本质》

老A说的一句话让我很受启发&#xff0c;想要深入了解框架&#xff0c;你要把精力聚焦在架构设计的层面来思考问题。而透彻了解底层原理&#xff0c;最好的笨办法就是根据原理对框架核心进行重建或者说再造。看起来没有捷径&#xff0c;也是最快的捷径。相信很多读者已经看过老A…

2019 ICPC Asia-East Continent Final

2019 ICPC Asia-East Continent Final 题号题目知识点ACity贪心BBlack and WhiteCDirichlet kkk-th rootDFireEFlow思维FGameGHappinessHKing随机思维IMoonJPermutationKAll Pair Maximum FlowLTravelMValue状压贪心

Mono和.NET Core 从比翼双飞到合体

.NET 开源之路就是 Mono和.NET Core 从比翼双飞到合体&#xff1a;2001年12月-2002年2月。一个新的平台诞生了。与惠普、英特尔和其他公司一起, 创建了 ECMA-335 标准, 该标准定义了支持多种编程语言的公共语言基础结构&#xff0c;C# 和 Visual Basic. Net。 F # 于2007年晚些…

7-3 打怪升级 (25 分)

7-3 打怪升级 (25 分) 题意&#xff1a; 很多游戏都有打怪升级的环节&#xff0c;玩家需要打败一系列怪兽去赢取成就和徽章。这里我们考虑一种简单的打怪升级游戏&#xff0c;游戏规则是&#xff0c;给定有 N 个堡垒的地图&#xff0c;堡垒之间有道路相连&#xff0c;每条道路…

Skywalking部署常见问题以及注意事项

Skywalking部署常见问题以及注意事项IntroSkyWalking 创建与2015年&#xff0c;提供分布式追踪功能。从5.x开始&#xff0c;项目进化为一个完成功能的Application Performance Management系统。他被用于追踪、监控和诊断分布式系统&#xff0c;特别是使用微服务架构&#xff0c…

CF1486B Eastern Exhibition

CF1486B Eastern Exhibition 题意&#xff1a; 二维平面上有 n 个点&#xff0c;要找一个点&#xff0c;使得所有点到它的曼哈顿距离&#xff08; x 和 y 的坐标差距之和&#xff09;之和最小。请问有几个满足该要求的点&#xff1f; 题解&#xff1a; 我们先考虑一维的情况…

GitHub推出包管理服务,npm与Nuget全支持

GitHub 今天推出了一项名为 GitHub Package Registry 的新产品&#xff0c;它提供了软件包管理服务&#xff0c;开发者通过它可发布公共或私有软件包。官方介绍&#xff0c;GitHub Package Registry 完全集成在 GitHub 中&#xff0c;因此和 repo 一样&#xff0c;用户可以使用…

Codeforces Round #708 (Div. 2)

Codeforces Round #708 (Div. 2) 题号题目知识点AMeximization思维BM-arrays思维C1k-LCM (easy version)构造C2k-LCM (hard version)构造DGenius思维构造E1Square-free division (easy version)质因子分解E2Square-free division (hard version)线性dp

CF1497E1 Square-free division (easy version)

CF1497E1 Square-free division (easy version) 题意&#xff1a; 这是简单版&#xff0c;此题中 k0 给出一串长为 n 的序列 a1,a2,a3...ana_1,a_2,a_3...a_na1​,a2​,a3​...an​ 把它分成尽量少的块使每一块中任意两数的乘积不是一个完全平方数。 输出最少的块数。 题解&…

发布dotNetCore程序到Kubernetes

上一篇《Mac中搭建Kubernetes》介绍了怎样在Mac中搭建单节点的Kubernetes&#xff0c;本文将编写一个dotNetCore的示例程序&#xff0c;并发布到Kubernetes中。环境基本步骤创建dotnetCore示例项目&#xff1b;本地搭建私有registry&#xff0c;或者使用DockerHub&#xff0c;本…

CF1497E2 Square-free division (hard version)

CF1497E2 Square-free division (hard version) 题意&#xff1a; 数组 a 由 n 个正整数构成。你需要将它们分割成最小数量的连续子段&#xff0c;使得每一个子段中的任意两个数&#xff08;不同位置&#xff09;的乘积不为完全平方数。 除此之外&#xff0c;你被允许在分割之…

[Cake] 2. dotnet 全局工具 cake

在上篇博客[Cake] 1. CI中的Cake中介绍了如何在CI中利用Cake来保持与CI/CD环境的解耦。当时dotnet 2.1还未正式发布&#xff0c;dotnet 还没有工具的支持&#xff0c;使得安装cake非常麻烦。不过随着 dotnet tool 的加入&#xff0c;这一问题得到了很好的解决。目前安装cake&am…

CF1497C k-LCM

CF1497C1 k-LCM (easy version) CF1497C2 k-LCM (hard version) 题意&#xff1a; 给定一个整数 n&#xff0c;请找到 k 个和为 n 的正整数a1,a2,....,aka_1,a_2,....,a_ka1​,a2​,....,ak​&#xff0c;使得lcma1,a2,....,ak<n2lcm{a_1,a_2,....,a_k}<\frac{n}{2}lcm…

官博翻译 | .NET Core 即 .NET 的未来

点击上方蓝字关注“汪宇杰博客”文 / Scott Hunter译 / 汪宇杰我们在2014年11月推出了.NET Core 1.0。.NET Core 的目标是借鉴我们过去12年构建、发布和服务.NET Framework的经验去构建更好的产品。这些改进如&#xff1a;并行安装&#xff08;您可以安装新版本&#xff0c;而…

CF1497D Genius

CF1497D Genius 题意&#xff1a; n个问题从i到n编号&#xff0c;第i个问题给出的ci2i,tagi,sic_i2^i,tag_i,s_ici​2i,tagi​,si​ 解决问题i后解决问题j条件是&#xff1a;IQ<|ci−cjc_i-c_jci​−cj​|,同时获得|si−sjs_i-s_jsi​−sj​|分 问题解决得次数和顺序不受限…

微软发布ML.NET 1.0,可一键添加机器学习模型

今天&#xff0c;我们很高兴宣布发布 ML.NET 1.0。ML.NET 是一个免费的、跨平台的开源机器学习框架&#xff0c;旨在将机器学习&#xff08;ML&#xff09;的强大功能引入.NET 应用程序。ML.NET GitHub&#xff1a;https://github.com/dotnet/machinelearning入门 http://dot.…

Codeforces Round #703 (Div. 2)

Codeforces Round #703 (Div. 2) 题号题目知识点AShifting Stacks思维BEastern Exhibition思维C1Guessing the Greatest (easy version)二分C2Guessing the Greatest (hard version)二分DMax Median思维二分EPaired PaymentFPairs of Paths

目前下载VS2017你可能会遇到这个坑

可能现在大伙都已经开始使用VS2019进行开发了。VS2019的下载使用也都很简单。由于工作需要&#xff0c;今天要在笔记本上安装VS2017,结果发现&#xff0c;VS2017的下载变得不是那么容易了&#xff0c;官方的下载方式也隐藏的很深&#xff0c;来来回回折腾了好一会才下载下来&am…

CF1486D Max Median

CF1486D Max Median 题意&#xff1a; 给定一个长度为 n 的序列 a&#xff0c;求所有长度 ≥k 的连续子序列中&#xff0c;中位数的最大值。定义中位数是一个长度为 x 的序列升序排序后的第 ⌊x12⌋\left\lfloor\frac{x1}{2}\right\rfloor⌊2x1​⌋位的值。 题解&#xff1a…

代码整洁之道(Clean Code)- 读书笔记

Sorry, 许久未更新文章了&#xff0c;主要因为刚刚换了一家新公司&#xff0c;忙于组建团队&#xff08;建设、招聘、流程、框架等&#xff09;与熟悉公司业务&#xff0c;还有领导给的其他工作等等&#xff0c;实在是没有时间更新了。最近在和团队分享Bob大叔的《Clean Code》…