Codeforces Global Round 6
D
Decreasing Debts
Codeforces
2000
原题
← CE →
翻译中…

There are $n$ people in this world, conveniently numbered $1$ through $n$. They are using burles to buy goods and services. Occasionally, a person might not have enough currency to buy what he wants or needs, so he borrows money from someone else, with the idea that he will repay the loan later with interest. Let $d(a,b)$ denote the debt of $a$ towards $b$, or $0$ if there is no such debt.

翻译中…

Sometimes, this becomes very complex, as the person lending money can run into financial troubles before his debtor is able to repay his debt, and finds himself in the need of borrowing money.

翻译中…

When this process runs for a long enough time, it might happen that there are so many debts that they can be consolidated. There are two ways this can be done:

翻译中…
  1. Let $d(a,b) \gt 0$ and $d(c,d) \gt 0$ such that $a \neq c$ or $b \neq d$. We can decrease the $d(a,b)$ and $d(c,d)$ by $z$ and increase $d(c,b)$ and $d(a,d)$ by $z$, where $0 \lt z \leq \min(d(a,b),d(c,d))$.
  2. Let $d(a,a) \gt 0$. We can set $d(a,a)$ to $0$.
翻译中…

The total debt is defined as the sum of all debts:

翻译中…

$$\Sigma_d = \sum_{a,b} d(a,b)$$

翻译中…

Your goal is to use the above rules in any order any number of times, to make the total debt as small as possible. Note that you don't have to minimise the number of non-zero debts, only the total debt.

翻译中…

Input

翻译中…

The first line contains two space separated integers $n$ ($1 \leq n \leq 10^5$) and $m$ ($0 \leq m \leq 3\cdot 10^5$), representing the number of people and the number of debts, respectively.

翻译中…

$m$ lines follow, each of which contains three space separated integers $u_i$, $v_i$ ($1 \leq u_i, v_i \leq n, u_i \neq v_i$), $d_i$ ($1 \leq d_i \leq 10^9$), meaning that the person $u_i$ borrowed $d_i$ burles from person $v_i$.

翻译中…

Output

翻译中…

On the first line print an integer $m'$ ($0 \leq m' \leq 3\cdot 10^5$), representing the number of debts after the consolidation. It can be shown that an answer always exists with this additional constraint.

翻译中…

After that print $m'$ lines, $i$-th of which contains three space separated integers $u_i, v_i, d_i$, meaning that the person $u_i$ owes the person $v_i$ exactly $d_i$ burles. The output must satisfy $1 \leq u_i, v_i \leq n$, $u_i \neq v_i$ and $0 \lt d_i \leq 10^{18}$.

翻译中…

For each pair $i \neq j$, it should hold that $u_i \neq u_j$ or $v_i \neq v_j$. In other words, each pair of people can be included at most once in the output.

翻译中…

Note

翻译中…

In the first example the optimal sequence of operations can be the following:

翻译中…
  1. Perform an operation of the first type with $a = 1$, $b = 2$, $c = 2$, $d = 3$ and $z = 5$. The resulting debts are: $d(1, 2) = 5$, $d(2, 2) = 5$, $d(1, 3) = 5$, all other debts are $0$;
  2. Perform an operation of the second type with $a = 2$. The resulting debts are: $d(1, 2) = 5$, $d(1, 3) = 5$, all other debts are $0$.
翻译中…

In the second example the optimal sequence of operations can be the following:

翻译中…
  1. Perform an operation of the first type with $a = 1$, $b = 2$, $c = 3$, $d = 1$ and $z = 10$. The resulting debts are: $d(3, 2) = 10$, $d(2, 3) = 15$, $d(1, 1) = 10$, all other debts are $0$;
  2. Perform an operation of the first type with $a = 2$, $b = 3$, $c = 3$, $d = 2$ and $z = 10$. The resulting debts are: $d(2, 2) = 10$, $d(3, 3) = 10$, $d(2, 3) = 5$, $d(1, 1) = 10$, all other debts are $0$;
  3. Perform an operation of the second type with $a = 2$. The resulting debts are: $d(3, 3) = 10$, $d(2, 3) = 5$, $d(1, 1) = 10$, all other debts are $0$;
  4. Perform an operation of the second type with $a = 3$. The resulting debts are: $d(2, 3) = 5$, $d(1, 1) = 10$, all other debts are $0$;
  5. Perform an operation of the second type with $a = 1$. The resulting debts are: $d(2, 3) = 5$, all other debts are $0$.
翻译中…

样例

Input #1
3 2
1 2 10
2 3 5
Output #1
2
1 2 5
1 3 5
InputCopy OutputCopy
Input #2
3 3
1 2 10
2 3 15
3 1 10
Output #2
1
2 3 5
InputCopy OutputCopy
Input #3
4 2
1 2 12
3 4 8
Output #3
2
1 2 12
3 4 8
InputCopy OutputCopy
Input #4
3 4
2 3 1
2 3 2
2 3 4
2 3 8
Output #4
1
2 3 15
InputCopy OutputCopy
题目信息
题号
1266D
时间限制
2 s
内存限制
256 MB
标签
构造
数据结构
图论
贪心
模拟
数学
双指针

题面与样例版权归 Codeforces 及出题人所有;中文翻译由 AI 生成(CI 管线),如有出入请以原文为准。