洛谷2046 NOI2010海拔

2022-05-25 15:00:15 字數 1500 閱讀 4769

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

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

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

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

qwq不過這個我不會證明啊

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

那麼直接最小割就行了

// luogu-judger-enable-o2

#include#include#include#include#include#includeusing 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];

queueq;

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()

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_queue,greater> q;

int s,t;

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

void splay(int s)

{ memset(vis,0,sizeof(vis));

memset(dis,127/3,sizeof(dis));

//cout{

dis[p]=dis[x]+val[i];

//cout<

洛谷2046 NOI2010海拔

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

洛谷 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取超級和弦,並加入以美妙度從小排到大的優先佇列中。取出堆頂元素,...