1797 Noi2010 海拔

2022-08-05 14:09:12 字數 2501 閱讀 6048

time limit: 20 sec  memory limit: 512 mb

submit: 6  solved: 4

[submit][status][web board]

yt市是一個規劃良好的城市,城市被東西向和南北向的主幹道劃分為n×n個區域。簡單起見,可以將yt市看作一個正方形,每一個區域也可看作一個正方形。從而,yt城市中包括(n+1)×(n+1)個交叉路口和2n×(n+1)條雙向道路(簡稱道路),每條雙向道路連線主幹道上兩個相鄰的交叉路口。下圖為一張yt市的地圖(n = 2),城市被劃分為2×2個區域,包括3×3個交叉路口和12條雙向道路。 小z作為該市的市長,他根據統計資訊得到了每天上班高峰期間yt市每條道路兩個方向的**量,即在高峰期間沿著該方向通過這條道路的人數。每一個交叉路口都有不同的海拔高度值,yt市市民認為爬坡是一件非常累的事情,每向上爬h的高度,就需要消耗h的體力。如果是下坡的話,則不需要耗費體力。因此如果一段道路的終點海拔減去起點海拔的值為h(注意h可能是負數),那麼一個人經過這段路所消耗的體力是max(這裡max表示取a, b兩個值中的較大值)。 小z還測量得到這個城市西北角的交叉路口海拔為0,東南角的交叉路口海拔為1(如上圖所示),但其它交叉路口的海拔高度都無法得知。小z想知道在最理想的情況下(即你可以任意假設其他路口的海拔高度),每天上班高峰期間所有人爬坡所消耗的總體力和的最小值。

第一行包含一個整數n,含義如上文所示。 接下來4n(n + 1)行,每行包含一個非負整數分別表示每一條道路每一個方向的**量資訊。輸入順序:n(n + 1)個數表示所有從西到東方向的**量,然後n(n + 1)個數表示所有從北到南方向的**量,n(n + 1)個數表示所有從東到西方向的**量,最後是n(n + 1)個數表示所有從南到北方向的**量。對於每一個方向,輸入順序按照起點由北向南,若南北方向相同時由西到東的順序給出(參見樣例輸入)。

1 ≤ n ≤ 500,0 ≤ 流量 ≤ 1,000,000且所有流量均為整數

僅包含一個數,表示在最理想情況下每天上班高峰期間所有人爬坡所消耗的總體力和(即總體力和的最小值),結果四捨五入到整數。

112

3456

78

3

//平面圖最小割轉最短路

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define rep(i,a,b) for(int i=a,tt=b;i<=tt;++i)

#define drep(i,a,b) for(int i=a,tt=b;i>=tt;--i)

#define erep(i,e,x) for(int i=x;i;i=e[i].next)

#define irep(i,x) for(__typedef(x.begin()) i=x.begin();i!=x.end();i++)

#define read() (strtol(ipos,&ipos,10))

#define sqr(x) ((x)*(x))

#define pb push_back

#define ps system("pause"); typedef

long

long

ll;

typedef pair

pii;

const

int oo=~0u>>2

; const

double inf=1e100;

const

double eps=1e-6

; string name="", in="

.in", out="

.out

";

struct

v

v(int _x,int _y,int

_v):x(_x),y(_y),v(_v){}

bool

operator

< (const v &o)const

};

priority_queue

q;

int n,r,c,st,ed,size,tot,ans=oo<<1

; int dis[508][508],map[508][508][4

];

void push(int x,int y,int

v)

if(y==1)ans=min(ans,v+map[x][y][1

]);

if(x==n)ans=min(ans,v+map[x+1][y][0

]);

} void

init()

void

dijkstra()

} intmain()

view code

NOI2010 海拔

看到輸出格式。。。。如果有小數的話為什麼需要保留到整數呢。。。所以 並沒有小數!我們可以認為每個點的海拔要麼是1要麼是0 然後求最小割就可以...

BZOJ2007 NOI2010 海拔

bzoj luogu 顯然你只會給每個地點的海拔設成 0 或 1 吧。 而且 0 和 1 還一定會是一個聯通塊。 所以題目相當於是要求送左上點到右下點的最小割。 類似bzoj1001狼抓兔子,把平面圖最小割轉化成對偶圖最短路。 其實這個東西很好理解。把平面圖和對偶圖畫出來,每一條 s 到 t 的路徑...

p2046 NOI2010 海拔

傳送門 分析 我們不難想到所有點的海拔要麼是0要麼是1 所以跑最小割即可 但是時間複雜度不行 於是轉化為對偶圖的最短路 include include include include include include include include include include include in...