BZOJ1108 [POI2007]天然气管道Gaz
题意:有N个黑点和N个白点,每一个黑点仅仅能水平向右和竖直向下延伸,与一个白点配对。
权值为两个点之间的曼哈顿距离。求使得n对点均配对最小的配对总权值。
思路:如果存在一组解,那么我们交换一对配对。若依然可以满足条件。画绘图就知道答案不变。
因此对于随意可行配对答案均同样。
于是我们统计出全部黑点的-x+y,全部白点的x-y,累加起来就可以。
Code:
#include <cstdio> #include <cstring> typedef long long LL; int main() { int n; scanf("%d", &n); long long res = 0; int x, y; register int i; for(i = 1; i <= n; ++i) scanf("%d%d",&x, &y), res += y-x; for(i = 1; i <= n; ++i) scanf("%d%d", &x, &y), res -=y-x; printf("%lld", res); return 0; }