QOJ.ac

QOJ

시간 제한: 1.0 s 메모리 제한: 32 MB 총점: 120

#16998. 债务

통계

在一个名叫 Križ 的小镇上住着 $N$ 个人。他们每个人都恰好向另外一个人借了钱。现在到了偿还所有债务的时候,但问题是每个人都把钱花光了!

Križ 的镇长决定解决这个问题。小镇将给一些人一些钱,以便他们能够偿还债务。当某些人拿到钱(或被还钱)后,会引发连锁反应——例如:人 A 从城市(镇政府)那里得到了钱。人 A 用这笔钱向人 B 偿还债务。然后人 B 用这笔钱向人 C 偿还债务,依此类推。如果人 B 没有足够的钱来偿还债务,他们会等待直到攒够。如果他们有比债务更多的钱,人 B 将在偿还后保留剩余的钱。

另一个例子:如果 Križ 住着两个人,他们互相欠对方 $100$ 元,小镇将给其中一个人 $100$ 元,这样他就可以向另一个人偿还债务(另一个人收到 $100$ 元后,又可以用这 $100$ 元还给第一个人)。

你的任务是计算小镇必须给居民子集的最小资金总额,以便在上述还款协议后,所有债务都得到偿还。

输入格式

输入的第一行包含一个整数 $N$ ($2 \le N \le 200\,000$),表示 Križ 的居民人数。他们从 $1$ 到 $N$ 进行编号。

接下来的 $N$ 行,每行包含两个由空格隔开的整数。在第 $i$ 行中,第一个数 $A_i$ 表示第 $i$ 个人欠钱的对象编号 ($1 \le A_i \le N, A_i \ne i$),第二个数 $B_i$ 表示欠款金额(单位为元,$1 \le B_i \le 10\,000$)。

输出格式

输出的唯一一行应包含一个整数,表示小镇必须给其居民的最小资金总额,以使所有债务都得到偿还。

样例

输入样例 1

4
2 100
1 100
4 70
3 70

输出样例 1

170

输入样例 2

3
2 120
3 50
2 80

输出样例 2

150

输入样例 3

5
3 30
3 20
4 100
5 40
3 60

输出样例 3

110

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.