Description
给你一张n个结点,m条边的无向图,每个结点都有一个整数权值。你需要执行一系列操作。操作分为三种,如下表所示。
操作
备注
D x (1<=x<=m)
删除编号为x的边。输入保证每条边至多被删除一次。
Q x k (1<=x<=n)
计算出结点x所在的联通块中,第k大的权值。如果不存在,输出0。
C x v (1<=x<=n)
把结点x的权值改为v。
操作序列的结束标志为单个字母E。结点编号为1到n,边的编号为1到m。
对于100%的数据,1 <= n <= 20000,0 <= m <= 60000,每个结点的权值绝对值不超过maxlongint
的整数,Q指令和C指令不超过200000条。
Analysis
显然可以时光倒流
比赛的时候想用set,但是看到Q操作发现懵逼了,结果弃掉了这个想法去打splay又长又恶心还爆0了
其实呢,为了资瓷Q操作,只需要在维护set的时候顺便同步维护一个支持修改,查询第k大的数据结构,比如说什么权值线段树之类的
然后那个D反过来就是合并两个连通块,就是启发式合并咯
于是乎复杂度是nlog^2,嗯挺慢的不过跑得过
当然线段树合并也是资瓷的啊