自然氣管道Gaz[POI2007]

——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;
}
相關文章
相關標籤/搜索