一个人只要存在债务关系,那么他的债务可以和这整个债务关系网中任何人连边,和他当初借出或欠下的人没有关系。只需要记录他的债务值即可。
1 #define HAVE_STRUCT_TIMESPEC 2 #include<bits/stdc++.h> 3 using namespace std; 4 long long val[100007]; 5 vector<array<long long,3> >v; 6 int main(){ 7 ios::sync_with_stdio(false); 8 cin.tie(NULL); 9 cout.tie(NULL); 10 long long n; 11 cin>>n; 12 long long m; 13 cin>>m; 14 for(long long i=1;i<=m;++i){ 15 long long a,b,c; 16 cin>>a>>b>>c; 17 val[a]-=c; 18 val[b]+=c; 19 } 20 long long pos=1; 21 for(long long i=1;i<=n;++i){ 22 while(val[i]>0){ 23 while(val[pos]>=0) 24 ++pos; 25 long long mn=min(-val[pos],val[i]); 26 val[i]-=mn; 27 val[pos]+=mn; 28 v.push_back({pos,i,mn}); 29 } 30 } 31 cout<<v.size()<<"\n"; 32 for(auto it:v) 33 cout<<it[0]<<" "<<it[1]<<" "<<it[2]<<"\n"; 34 return 0; 35 }