題目
首先這道題的生成樹部分還是比較好想的,如果只有\(a\)或\(b\)乙個限制,那麼我們求乙個最小生成樹最小化最大邊權
有兩個限制的話我們先對\(a\)求出最小生成樹,考慮把沒有加入最小生成樹的邊加進去,顯然會使得\(1\)到\(n\)之間最大的\(b\)變小,就把剩下的邊一條一條加進去,維護出\(1\)到\(n\)之間的最大邊權
\(lct\)維護的是點的資訊,處理邊權的話我們不能像樹剖那樣把一條邊的資訊存在乙個兒子裡,因為樹的結構時刻在變化,所以我們得把每一條邊當成
#include#include#include#include#define maxn 1500005
#define re register
#define inf 999999999
#define ll long long
#define max std::max
#define min std::min
#define pt putchar(1)
inline int read()
int n,m,ans;
struct e e[maxn];
inline int cmp(e a,e b)
int ch[maxn][2],rev[maxn],fa[maxn],d[maxn],st[maxn];
inline int nroot(int x)
inline void pushup(int x)
inline void pushdown(int x)
inline void rotate(int x)
inline void splay(int x)
//putchar(10);
}inline void access(int x)
inline void makeroot(int x)
inline int findroot(int x)
inline void split(int x,int y)
inline void link(int x,int y)
inline void cut(int x,int y)
int main()
if(findroot(m+1)==findroot(n+m))
split(m+1,n+m),ans=min(ans,e[i].a+e[d[n+m]].b);
}if(ans!=inf) printf("%d\n",ans);else puts("-1");
return 0;
}
NOI2014 魔法森林
為了得到書法大家的真傳,小e同學下定決心去拜訪住在魔法森林中的隱士。魔法森林可以被看成乙個包含個n節點m條邊的無向圖,節點標號為 1 n 邊標號為1 m 初始時小e同學在 1 號節點,隱士則住在 n 號節點。小e需要通過這一片魔法森林,才能夠拜訪到隱士。魔法森林中居住了一些妖怪。每當有人經過一條邊的...
NOI2014 魔法森林
為了得到書法大家的真傳,小 e 同學下定決心去拜訪住在魔法森林中的隱士。魔法森林可以被看成乙個包含 n 個節點 m 條邊的無向圖,節點標號為1,2,3,n,邊標號為 1,2,3,m。初始時小 e 同學在 1 號節點,隱士則住在 n 號節點。小 e 需要通過這一片魔法森林,才能夠拜訪到隱士。魔法森林中...
NOI2014 魔法森林
noi2014 魔法森林 要求a 與 b 的總和最小 可以按a排序 再以b為權值維護一顆樹 lct維護最小生成樹 要解決的問題 將每一條邊變為乙個點 邊權變為點權 舉個栗子 u v有一條邊權為w的邊 怎lct連邊方式為 u new v new的點權為w 不斷維護最小生成樹 如果新加入的邊的 u與v不...