其实这题的翻译反而不如原题好理解,建议先阅读原题后重新思考做法
翻译把原来简单的东西复杂了
原题的题意是有若干个三元组\((x,y,z)\)表示\(x\)欠\(y\) \(z\)元钱
然后让你重新整理债务关系使得金钱交易量最小
我们发现我们把问题转换成欠钱和还钱的问题后,我们就可以思考一个东西了
我们平时欠钱还钱时,并不在乎是谁欠我们或是还给我们的,我们只在乎我们应该得到/失去多少钱
因此我们设\(in_u\)表示连向\(u\)点的边的边权和(即要收取\(in_u\)元),\(out_u\)表示从\(u\)连向别的点的边的边权和(即欠了别人\(out_u\)元,要换出去),则可以得到这个人的有效金钱交易量为\(in_u - out_u\)
我们得到这个后就很好考虑了,我们确定了每个人金钱交易量的下界,而且这个下界是始终可以取到的,一种构造方法就是始终让\(in_u - out_u\)为负的人给值为正的人钱,这种操作一定是不劣的
为什么呢?因为每个借给别人钱的人不管是分成多次,还是一次拿完,至少都会对交易量造成\(in_u - out_u\)的贡献。因此不存在更优的解法。
此外,这种方式一定是合法的。一个人借出去了\(in_u - out_u\)块钱,拿回来了\(in_u - out_u\)块钱,相当于债务清零。
最终复杂度\(O(n)\)
标签:原题,连向,CF1266D,交易量,欠钱,我们,out From: https://www.cnblogs.com/fox-konata/p/17685927.html