https://www.luogu.org/problemnew/show/P3250

树链剖分 + 线段树 + 优先队列
要求未被影响的请求中最大的
所以每次将每条路径在整棵树上的补集的每个节点的优先队列加入该路径的权值

mid 敲错调了一上午

气炸。。。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string>
#include <queue>
#include <vector> using namespace std;
const int N = 1e5 + ; #define yxy getchar()
#define lson jd << 1
#define rson jd << 1 | 1 #define RR freopen("gg.in", "r", stdin) int n, Ty, Tim, how, ans;
int fa[N], topp[N], deep[N], size[N], son[N], tree[N];
priority_queue <int> Q1[N << ], Q2[N << ];
vector <int> vec[N << ];
struct Node{int up, down;} D[N];
struct Node2{int l, r, val;} Ask[N << ]; inline int read() {
int x = ; char c = yxy;
while(c < '' || c > '') c = yxy;
while(c >= '' && c <= '') x = x * + c - '', c = yxy;
return x;
} void Dfs_son(int u, int f_, int dep) {
fa[u] = f_;
deep[u] = dep;
size[u] = ;
int siz_ = vec[u].size();
for(int i = ; i < siz_; i ++) {
int v = vec[u][i];
if(v != f_) {
Dfs_son(v, u, dep + );
size[u] += size[v];
if(size[v] > size[son[u]]) son[u] = v;
}
}
} void Dfs_un(int u, int tp) {
topp[u] = tp;
tree[u] = ++ Tim;
if(!son[u]) return ;
Dfs_un(son[u], tp);
int siz_ = vec[u].size();
for(int i = ; i < siz_; i ++) {
int v = vec[u][i];
if(v != fa[u] && v != son[u]) Dfs_un(v, v);
}
} inline bool cmp(Node a, Node b) {return a.up < b.up;} void Sec_G(int l, int r, int jd, int x, int y, int yj) {
if(x <= l && r <= y) {
if(how == ) Q1[jd].push(yj);
else Q2[jd].push(yj);
return ;
}
int mid = (l + r) >> ;
if(x <= mid) Sec_G(l, mid, lson, x, y, yj);
if(y > mid) Sec_G(mid + , r, rson, x, y, yj);
} inline void Sec_G_imp(int x, int y, int val) {
int tp1 = topp[x], tp2 = topp[y], js();
while(tp1 != tp2) {
if(deep[tp1] < deep[tp2]) swap(x, y), swap(tp1, tp2);
D[++ js].up = tree[tp1];
D[js].down = tree[x];
x = fa[tp1];
tp1 = topp[x];
}
if(deep[x] < deep[y]) swap(x, y);
D[++ js].up = tree[y]; D[js].down = tree[x];
sort(D + , D + js + , cmp);
int last = ;
for(int i = ; i <= js; i ++) {
int l_ = last + , r_ = D[i].up - ;
if(l_ <= r_) Sec_G(, n, , l_, r_, val);
last = D[i].down;
}
int l_ = last + , r_ = n;
if(l_ <= r_) Sec_G(, n, , l_, r_, val);
} int get_answer(int jd) {
int ret = -;
while(!Q2[jd].empty() && (Q1[jd].top() == Q2[jd].top())) Q1[jd].pop(), Q2[jd].pop();
if(Q1[jd].empty()) return -;
return Q1[jd].top();
} void Sec_A(int l, int r, int jd, int x) {
ans = max(ans, get_answer(jd));
if(l == r) return ;
int mid = (l + r) >> ;
if(x <= mid) Sec_A(l, mid, lson, x);
else Sec_A(mid + , r, rson, x);
} int main() {
n = read();
Ty = read();
for(int i = ; i < n; i ++) {
int u = read(), v = read();
vec[u].push_back(v);
vec[v].push_back(u);
}
Dfs_son(, , );
Dfs_un(, );
for(int i = ; i <= Ty; i ++) {
int opt = read();
if(opt == ) { //添加
Ask[i].l = read(), Ask[i].r = read(), Ask[i].val = read();
how = ;
Sec_G_imp(Ask[i].l, Ask[i].r, Ask[i].val);
} else if(opt == ) { //删除
int x = read();
how = -;
Sec_G_imp(Ask[x].l, Ask[x].r, Ask[x].val);
} else { //查询
int x = read();
ans = -;
Sec_A(, n, , tree[x]);
cout << ans << endl;
}
}
return ;
}

[Luogu] 网络的更多相关文章

  1. [Luogu 2604] ZJOI2010 网络扩容

    [Luogu 2604] ZJOI2010 网络扩容 第一问直接最大流. 第二问,添加一遍带费用的边,边权 INF,超级源点连源点一条容量为 \(k\) 的边来限流,跑费用流. 大约是第一次用 nam ...

  2. luogu 1327 数列排序 & 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 J题 循环节

    luogu 1327 数列排序 题意 给定一个数列\(\{an\}\),这个数列满足\(ai≠aj(i≠j)\),现在要求你把这个数列从小到大排序,每次允许你交换其中任意一对数,请问最少需要几次交换? ...

  3. BZOJ 1834 Luogu P2604 [ZJOI2010]网络扩容 (最小费用最大流)

    题目连接: (luogu) https://www.luogu.org/problemnew/show/P2604 (bzoj) https://www.lydsy.com/JudgeOnline/p ...

  4. P3376 【模板】网络最大流(luogu)

    P3376 [模板]网络最大流(luogu) 最大流的dinic算法模板(采取了多种优化) 优化 时间 inline+当前弧+炸点+多路增广 174ms no 当前弧 175ms no 炸点 249 ...

  5. 【Luogu P3376】网络最大流

    Luogu P3376 最大流是网络流模型的一个基础问题. 网络流模型就是一种特殊的有向图. 概念: 源点:提供流的节点(入度为0),类比成为一个无限放水的水厂 汇点:接受流的节点(出度为0),类比成 ...

  6. LOJ #2547 Luogu P4517「JSOI2018」防御网络

    好像也没那么难写 LOJ #2547 Luogu P4517 题意 在一棵点仙人掌中等概率选择一个点集 求选出点集的斯坦纳树大小的期望 定义点仙人掌为不存在一个点在多个简单环中的连通图 斯坦纳树为在原 ...

  7. Luogu P2002 消息扩散&&P1262 间谍网络

    怕自己太久没写Tarjan了就会把这种神仙算法忘掉. 其实这种类型的图论题的套路还是比较简单且显然的. P2002 消息扩散 很显然的题目,因为在一个环(其实就是强连通分量)中的城市都只需要让其中一个 ...

  8. 【题解】Luogu P2604 [ZJOI2010]网络扩容

    原题传送门:P2604 [ZJOI2010]网络扩容 这题可以说是板题 给你一个图,先让你求最大流 再告诉你,每条边可以花费一些代价,使得流量加一 问至少花费多少代价才能使最大流达到k 解法十分简单 ...

  9. 【luogu P1262 间谍网络】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1262 注意: 1.缩点时计算出入度是在缩完点的图上用color计算.不要在原来的点上计算. 2.枚举出入度时 ...

随机推荐

  1. (八)Struts标签基础(一)

    一.Struts标签分类 二.标签的使用 2.1 标签的主题 主题的设置与struts.xml中的常量<constant name="struts.ui.theme" val ...

  2. K最近邻算法项目实战

    这里我们用酒的分类来进行实战练习 下面来代码 1.把酒的数据集载入到项目中 from sklearn.datasets import load_wine #从sklearn的datasets模块载入数 ...

  3. MSSql-SP_who分析数据库性能

    https://blog.csdn.net/xiaoxu0123/article/details/5757640 https://www.cnblogs.com/kelelipeng/p/104959 ...

  4. Eigen 学习笔记

    1.  初始化 //外部指针初始化 ]={...}; ] = ...; kernels[].mu = Vector3d(_mu0); kernels[].sigma_inv = Matrix3d(_s ...

  5. 详解为什么设置overflow为hidden可以清除浮动带来的影响

    1.问题起源 在平时的业务开发写CSS中,为了满足页面布局,元素的浮动特性我们用的不能再多了.使用浮动的确能够解决一些布局问题,但是也带了一些副作用影响,比如,父元素高度塌陷,我们有好几种可以清除浮动 ...

  6. fastclick插件中存在的bug

    1.在vue项目中安装fastclick插件 npm install --save fastclick 2.在main.js中引入并绑定到body import FastClick from 'fas ...

  7. Java 面向对象(一)面向对象思想

    一.面向对象思想 1.概述 Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计.开发计算机程序. 这里的对象泛指现实中一切事 ...

  8. C++线程同步之原子操作

    所谓的原子操作就是指一个线程对于某一个资源做操作的时候能够保证没有其它的线程能够对此资源进行访问. 原子操作仅仅能够解决某一个变量的问题,只能使得一个整型数据做简单算术运算的时候是原子的. 以下案例需 ...

  9. Masonry个人笔记

    1.有些场合需要获取View在约束之后的frame.直接init初始化后取出来的均为(0,0,0,0).在以下方法中获取即可: View: - (void)layoutSubviews ViewCon ...

  10. dubbo常见异常及解决方式

    1.出现RpcException: Failed to invoke the method post in the service com.xxx.xxx.xxx异常怎么办?表示调用失败1.检查网络是 ...