Problem
【SHOI2003】Pacman 吃豆豆
Description
两个吃豆豆。一开始的时候,都在坐标原点的左下方,豆豆都在右上方。走到豆豆处就会吃掉它。行走的路线很奇怪,只能向右走或者向上走,他们行走的路线不可以相交。 请你帮这两个计算一下,他们俩加起来最多能吃掉多少豆豆。
Input
第一行为一个整数,表示豆豆的数目。 接下来 行,每行一对正整数,表示第个豆豆的坐标。任意两个豆豆的坐标都不会重合。
Output
Sample Input
1 | 8 |
Sample Output
1 | 7 |
HINT
样例解释
标签:费用流
Solution
貌似是可以用肝的。
费用流建模细节挺多。
首先可以发现不相交时废话。若穿过则互换名字即可。
由于点数很多,所以不能两两连边,发现只需要把按和排序后相邻两点连边即可。
首先需要限制每个点的流量,需要将每个点拆成两个点,连边限流。
这里由于两条线可以经过同一个点,但贡献只算一个,则需要连两条边,流量均为,而费用则是一条为另一条为。
注意源点也需要限制的流量,即需要把源点拆成两个点,中间连流量费用的边。
相邻两点间连流量为费用为的边。
总结建图:
- 源点拆成两个点和
流量 费用 - 把每个点拆成和
流量 费用
流量 费用
流量 费用
流量 费用 - 可连边的相邻两点和间有
流量 费用
最后跑大费流即可。
Code
1 |
|