Codeforces Global Round 6D(VECTOR >)

一个人只要存在债务关系,那么他的债务可以和这整个债务关系网中任何人连边,和他当初借出或欠下的人没有关系。只需要记录他的债务值即可。

 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 }
上一篇:最小割树(洛谷4897)


下一篇:[THUSC2016]成绩单 [区间dp]