传送门
先把边双连通分量用圆方树一样的方法缩点,然后把新建的树树剖维护。
注意对于边双连通分量需要维护动态最小值,可以用 m u l t i s e t multiset multiset。
代码:
#include<bits/stdc++.h>
#define lc (p<<1)
#define rc (p<<1|1)
#define mid (T[p].l+T[p].r>>1)
using namespace std;
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
const int N=2e5+5,M=3e5+5;
int siz[N],w[N<<1],top[N],dep[N],pred[N],hson[N],num[N],dfn[N],low[N],tot=0,sig=0,n,m,q,blo[N],stk[N],Top=0,fa[N];
struct Node{
int l,r,mn;}T[N<<2];
vector<int>g[N],e[N<<1];
multiset<int>W[N<<1];
inline void tarjan(int p,int pre){
dfn[p]=low[p]=++tot,stk[++Top]=p;
for