CF1266D

原题

翻译

其实这题的翻译反而不如原题好理解,建议先阅读原题后重新思考做法


 
 
 
 
 
 
 
 
 

分割线

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


翻译把原来简单的东西复杂了

原题的题意是有若干个三元组(x,y,z)表示xy z元钱

然后让你重新整理债务关系使得金钱交易量最小


我们发现我们把问题转换成欠钱和还钱的问题后,我们就可以思考一个东西了

我们平时欠钱还钱时,并不在乎是谁欠我们或是还给我们的,我们只在乎我们应该得到/失去多少钱

因此我们设inu表示连向u点的边的边权和(即要收取inu元),outu表示从u连向别的点的边的边权和(即欠了别人outu元,要换出去),则可以得到这个人的有效金钱交易量为inuoutu

我们得到这个后就很好考虑了,我们确定了每个人金钱交易量的下界,而且这个下界是始终可以取到的,一种构造方法就是始终让inuoutu为负的人给值为正的人钱,这种操作一定是不劣的

为什么呢?因为每个借给别人钱的人不管是分成多次,还是一次拿完,至少都会对交易量造成inuoutu的贡献。因此不存在更优的解法。

此外,这种方式一定是合法的。一个人借出去了inuoutu块钱,拿回来了inuoutu块钱,相当于债务清零。

最终复杂度O(n)

posted @   FOX_konata  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示