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