——BZOJ1034 php
Mary試圖控制成都的自然氣市場。專家已經標示出了最好的自然氣井和中轉站在成都的地圖。如今須要將中轉
站和自然氣井鏈接起來。每一箇中轉站必須被鏈接到正好一個鑽油井,反之亦然。 Mary特別指名,建設的自然氣管
道必須從某個自然氣井開始,向南或者向東建設。Mary想知道怎麼鏈接每一個自然氣井和中轉站,使得須要的自然氣
管道的總長度最小。node
第一行爲一個正整數n(2<=n<=50000),表示自然氣井的數量(中轉站的數量與之相等)。接下來n行,每行兩
個整數xi和yi(0<=xi,yi<=100000),表示自然氣井的座標。向東走則x座標增長,向北走則y座標增長。接下來n
行,每行兩個數xj'和yj'(0<=xj',yj'<=100000),表示中轉站的座標。算法
第一行包含一個數,表示最短的鏈接管道長度。spa
3 3 5 1 2 4 3 6 3 5 2 2 1
9
看到這道題,你必定會想各類求最短或者最多匹配的算法,但是……
你想沒想過,無論是什麼形式的匹配。每兩個點的曼哈頓距離之和都是相等的!
因此根本不須要算法,直接輸出這個距離!code
#include<cstdio> #include<algorithm> using namespace std; const int maxn = 50005; typedef long long ll; struct node { ll x; ll y; }; node wll[maxn]; node stp[maxn]; int n; ll ans; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%lld%lld",&wll[i].x,&wll[i].y); ans += wll[i].x; ans -= wll[i].y; } for(int i=1;i<=n;i++) { scanf("%lld%lld",&stp[i].x,&stp[i].y); ans -= stp[i].x; ans += stp[i].y; } printf("%lld",abs(ans)); return 0; }