\(\text{Problem}\)

给你一张 \(n\) 个结点,\(m\) 条边的无向图,每个结点都有一个整数权值。你需要执行一系列操作。操作分为三种,如下表所示。

操作

备注

\(\text{D x (1<=x<=m)}\)

删除编号为x的边。输入保证每条边至多被删除一次。

\(\text{Q x k (1<=x<=n)}\)

计算出结点x所在的联通块中,第k大的权值。如果不存在,输出 \(0\)。

\(\text{C x v (1<=x<=n)}\)

把结点 \(x\) 的权值改为 \(v\)。

操作序列的结束标志为单个字母 \(E\) 。结点编号为 \(1\) 到 \(n\),边的编号为 \(1\) 到 \(m\)。

\(\text{Solution}\)

参见 \(\text{HNOI2012}\) 永无乡

因为删边的操作并不容易实现,而题目有没要求在线

于是考虑离线变删边为加边

那就和那题一样了

注意值域与空间

\(\text{Code}\)

#include<cstdio>
using namespace std; const int N = 2e4 + 5, QN = 3e5 + 5, Sz = 2e5 * 45;
int L, R, n, m, q, size, fa[N], a[N], rt[N], ans[QN];
int sum[Sz], ls[Sz], rs[Sz];
struct node{int x, y, w;}E[3 * N], Q[2 * QN]; inline void read(int &x)
{
x = 0; char ch = getchar(); int f = 1;
while (ch < '0' || ch > '9') f = (ch == '-' ? -1 : f), ch = getchar();
while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
x *= f;
} inline void pushup(int p){sum[p] = sum[ls[p]] + sum[rs[p]];} void merge(int &x, int y, int l, int r)
{
if (!x || !y) return void(x += y);
if (l == r) return void(sum[x] += sum[y]);
int mid = (l + r) >> 1;
merge(ls[x], ls[y], l, mid);
merge(rs[x], rs[y], mid + 1, r);
pushup(x);
} int find(int x){return (fa[x] == x ? x : fa[x] = find(fa[x]));} inline void dsu_union(int x, int y)
{
int u = find(x), v = find(y);
if (u == v) return;
fa[v] = fa[u];
merge(rt[u], rt[v], L, R);
rt[v] = 0;
} void update(int &p, int l, int r, int x, int v)
{
if (!p) p = ++size;
if (l == r) return void(sum[p] += v);
int mid = (l + r) >> 1;
if (x <= mid) update(ls[p], l, mid, x, v);
else update(rs[p], mid + 1, r, x, v);
pushup(p);
} int query(int p, int l, int r, int x)
{
if (sum[p] < x) return 0;
if (l == r) return l;
int mid = (l + r) >> 1;
if (sum[rs[p]] >= x) return query(rs[p], mid + 1, r, x);
return query(ls[p], l, mid, x - sum[rs[p]]);
} int main()
{
L = -1e6, R = 1e6;
read(n), read(m);
for(int i = 1; i <= n; i++) read(a[i]);
for(int i = 1, x, y; i <= m; i++) read(E[i].x), read(E[i].y), E[i].w = 1;
char op[5];
for(int i = 1, x, y; ; i++)
{
scanf("%s", op);
if (op[0] == 'E') break;
read(x);
if (op[0] == 'D') E[x].w = 0, Q[i] = node{x, 0, 1};
else if (op[0] == 'Q') read(y), Q[i] = node{x, y, 2};
else read(y), Q[i] = node{x, a[x], 3}, a[x] = y;
q = i;
}
for(int i = 1; i <= n; i++) fa[i] = i, update(rt[i], L, R, a[i], 1);
for(int i = 1; i <= m; i++)
if (E[i].w == 1) dsu_union(E[i].x, E[i].y);
for(int i = q; i; i--)
{
if (Q[i].w == 1) dsu_union(E[Q[i].x].x, E[Q[i].x].y);
else{
int now = rt[find(Q[i].x)];
if (Q[i].w == 2) ans[++ans[0]] = query(now, L, R, Q[i].y);
else update(now, L, R, a[Q[i].x], -1), update(now, L, R, a[Q[i].x] = Q[i].y, 1);
}
}
for(int i = ans[0]; i; i--) printf("%d\n", ans[i]);
}

JZOJ 5174的更多相关文章

  1. Valentine's Day Round 1001.Ferries Wheel(hdu 5174)解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5174 题目意思:给出 n 个人坐的缆车值,假设有 k 个缆车,缆车值 A[i] 需要满足:A[i−1] ...

  2. (jzoj snow的追寻)线段树维护树的直径

    jzoj snow的追寻 DFS序上搞 合并暴力和,记录最长链和当前最远点,距离跑LCA # include <stdio.h> # include <stdlib.h> # ...

  3. [jzoj]3506.【NOIP2013模拟11.4A组】善良的精灵(fairy)(深度优先生成树)

    Link https://jzoj.net/senior/#main/show/3506 Description 从前有一个善良的精灵. 一天,一个年轻人B找到她并请他预言他的未来.这个精灵透过他的水 ...

  4. [jzoj]3468.【NOIP2013模拟联考7】OSU!(osu)

    Link https://jzoj.net/senior/#main/show/3468 Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: ...

  5. [jzoj]5478.【NOIP2017提高组正式赛】列队

    Link https://jzoj.net/senior/#main/show/5478 Description Sylvia 是一个热爱学习的女孩子.       前段时间,Sylvia 参加了学校 ...

  6. [jzoj]1115.【HNOI2008】GT考试

    Link https://jzoj.net/senior/#main/show/1115 Description 申准备报名参加GT考试,准考证号为n位数X1X2X3...Xn-1Xn(0<=X ...

  7. [jzoj]2538.【NOIP2009TG】Hankson 的趣味题

    Link https://jzoj.net/senior/#main/show/2538 Description Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫H ...

  8. [jzoj]4216.【NOIP2015模拟9.12】平方和

    Link https://jzoj.net/senior/#main/show/4216 Description 给出一个N个整数构成的序列,有M次操作,每次操作有一下三种: ①Insert Y X, ...

  9. [jzoj]2938.【NOIP2012模拟8.9】分割田地

    Link https://jzoj.net/senior/#main/show/2938 Description 地主某君有一块由2×n个栅格组成的土地,有k个儿子,现在地主快要终老了,要把这些土地分 ...

  10. [jzoj]2505.【NOIP2011模拟7.29】藤原妹红

    Link https://jzoj.net/senior/#main/show/2505 Description 在幻想乡,藤原妹红是拥有不老不死能力的人类.虽然不喜欢与人们交流,妹红仍然保护着误入迷 ...

随机推荐

  1. MyBatis详解(一)

    MyBatis简单介绍 [1]MyBatis是一个持久层的ORM框架[Object Relational Mapping,对象关系映射],使用简单,学习成本较低.可以执行自己手写的SQL语句,比较灵活 ...

  2. Duplicate property mapping of xxx found in xx 嵌套异常,重复的属性在映射中发现。

    该异常的原意是因为在映射文件中出现了两个一样的属性名: <property name="相同的属性名出现了两次以上" > <property name=" ...

  3. 教你用JavaScript完成轮播图

    案例介绍 欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个轮播图.图片每3秒自动轮换,也可以点击左右按键轮播图片,当图片到达最左端或最右端时, ...

  4. linux内核源码下载地址

    一.官网链接 https://www.kernel.org/ 二.HTTP https://www.kernel.org/pub/ 三.GIT https://git.kernel.org/ 四.镜像 ...

  5. 【开发必备】单点登录,清除了cookie,页面还保持登录状态?

    背景 本地搭建了一台认证服务器.两台资源服务器,看看请求的过程 开始 没登录,直接请求资源服务器,结果跳转到的登录页面 登录后,请求了认证服务器的登录接口,然后顿重定向,最后回到了资源服务器的接口,页 ...

  6. WPF中的“资源”

    WPF中的"资源" 资源概述 WPF中的资源的概念有点类似 web 技术中的静态资源的概念.可以是一个样式,也可以是一个button的边框设置集合. 可以简单的将资源分为如下几个类 ...

  7. mysql数据库(字段约束条件)

    什么是字段约束 字段约束就是将字段的内容定一个规则,我们要按照规则办事 约束 描述 关键字 非空约束 限制该字段的数据不能为null not null 唯一约束 保证该字段的所有数据都是唯一.不重复的 ...

  8. selenium 之可视模式、静默模式、忽略证书不可用的设置

    1.可视模式的设置(在前台工作) from selenium import webdriver import time url = "https://y.qq.com/n/ryqq/song ...

  9. CH9120/CH9121 WCH-ETH透传芯片(持续更新)

    网络变压器中心抽头: 如果使用网络变压器,变压器的中心抽头需要看PHY芯片时电流型还是电压型. 如果是电压型,则需要通过一个电容直接接到GND. 如果时电流型的PHY,那么就需要根据PHY芯片来看,从 ...

  10. [seaborn] seaborn学习笔记10-绘图实例(2) Drawing example(2)

    文章目录 10 绘图实例(2) Drawing example(2) 1. Grouped violinplots with split violins(violinplot) 2. Annotate ...