洛谷2046 NOI2010海拔

2021-08-26 02:50:05 字數 2712 閱讀 9508

qwq題目太長 這裡就不複製了題目

這個題…算是個比較經典的平面圖最小割變成對偶圖的最短路了qwq

首先考慮最小割應該怎麼做。

有乙個性質,就是每個點的海拔要麼是1,要麼是0

qwq不過這個我不會證明啊

那麼既然知道了這個性質,我們對於地圖上的每個點,實際上就是劃分成兩個集合,乙個是

1 1

,乙個是

0' role="presentation" style="position: relative;">00

那麼直接最小割就行了

// luogu-judger-enable-o2

#include

#include

#include

#include

#include

#include

using

namespace

std;

inline

int read()

while (isdigit(ch))

return x*f;

}const

int maxn = 110*110;

const

int maxm = 1e6+1e2;

const

int inf = 1e9;

int point[maxn];

int nxt[maxm],to[maxm],val[maxm];

int cnt=1;

int h[maxn];

queue

q;int n,m;

int s,t;

void addedge(int x,int y,int w)

void insert(int x,int y,int w)

bool bfs(int s)}}

if (h[t]==-1) return

false;

else

return

true;

}int dfs(int x,int low)

}if (low>0) h[x]=-1;

return totflow;

}int dinic()

return ans;

}int main()

} for (int i=1;ifor (int j=1;j<=n;j++)

for (int i=1;i<=n;i++)

}for (int i=1;ifor (int j=1;j<=n;j++)

cout

0;}

不過這個最小割的複雜度是**的,顯然沒法通過這個題,那麼我們這時候就需要用到乙個很關鍵的性質了

平面圖最小割等於對偶圖的最短路

那麼什麼是對偶圖呢?

簡單來說,就是把原圖的每個封閉面,看成乙個點,然後原圖的每一種割,對應著新圖s到

t s到t

的一條路徑

但是qwq這裡先留跟個坑,就是關於邊的方向的問題….這裡還不是很理解呢

轉化成新圖,建好圖之後,直接從

s s

開始跑最短路,di

s[t]

' role="presentation" style="position: relative;">dis

[t]d

is[t

]就是答案

一般原圖的st和新圖的st成對角線的關係

#include

#include

#include

#include

#include

#define pa pair

#include

using

namespace

std;

inline

long

long read()

while (isdigit(ch))

return x*f;

}const

int maxn = 510;

const

int n = maxn*maxn;

const

int maxm = 2e6+1e2;

int a[maxn][maxn][maxn];

int point[n],nxt[maxm],to[maxm];

int cnt;

int vis[n];

int n,m;

long

long dis[n],val[maxm];

priority_queuevector

,greater> q;

int s,t;

void addedge(int x,int y,long

long w)

void splay(int s)}}

}inline

int getnum(int x,int y)

int main()

for (int i=1;ifor (int j=1;j<=n;j++)

for (int i=1;i<=n;i++)

for (int j=1;jlong

long x=read();

addedge(getnum(i-1,j),getnum(i,j),x);

} for (int i=1;ifor (int j=1;j<=n;j++)

splay(s);

cout

0;}

洛谷2046 NOI2010海拔

qwq題目太長 這裡就不複製了 題目這個題.算是個比較經典的平面圖最小割變成對偶圖的最短路了qwq 首先考慮最小割應該怎麼做。有乙個性質,就是每個點的海拔要麼是1,要麼是0 qwq不過這個我不會證明啊 那麼既然知道了這個性質,我們對於地圖上的每個點,實際上就是劃分成兩個集合,乙個是 1 乙個是 0 ...

洛谷 P2048 NOI2010 超級鋼琴

給出乙個序列,求和最大的k個連續子串行的和,且連續子串行長度在l與r之間.首先預處理出字首和,我們可以從左端點開始考慮,若左端點為i,則右端點在i l 1與i r 1之間,那麼可以計算出這些區間的最大值,然後放到堆裡去,每次從堆中取出最大值加到ans中後再將該區間左右兩區間的最大值放入堆中.也就是說...

洛谷P2048 NOI2010 超級鋼琴 題解

近期發現這篇題解有點爛,更新一下,刪繁就簡,詳細重點。多加了注釋。就醬紫啦!我們需要先算美妙度的字首和,並初始化rmq。迴圈 i 從 1 到 n 因為以i為起點的和弦終點必定是 i l 1 到 i r 1 之間,所以只要在區間內用rmq取超級和弦,並加入以美妙度從小排到大的優先佇列中。取出堆頂元素,...