题解 CF165D 【Beard Graph】】的更多相关文章

$ \color{#0066ff}{ 题目描述 }$ 给定一棵树,有m次操作. 1 x 把第x条边染成黑色 2 x 把第x条边染成白色 3 x y 查询x~y之间的黑边数,存在白边输出-1 \(\color{#0066ff}{输入格式}\) 第一行一个正整数N (1 ≤ N ≤ 100000),节点总数 接下来N − 1行,每行两个整数a,b 表示一条边 接下来是一个正整数m(1 ≤ m ≤ 300000),表示共有m次操作. 后面跟着m行,是操作 \(\color{#0066ff}{输出格式}…
题面 题解 乍一看,单点修改,单链查询,用树链剖分维护每条链上白边的数量就完了, 还是--得写树链剖分吗?--3e5,乘两个log会T吗-- (双手颤抖) (纠结) 不!绝不写树链剖分! 这题如果能维护每个点到根节点路径上的白边数量,就可以用lca直接算,怎么维护呢 把点按dfs序排序,每个点存它到根节点路径上白边数量,当边的颜色变化时,就把以该边下端点为根的子树内的值整体加一或减一,也就是在按dfs序排序后的序列上做区间修改,然后单点查询 把单点修改.区间查询变成区间修改.单点查询了耶! 然后…
地址:http://codeforces.com/problemset/problem/165/D 题目: D. Beard Graph time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standard output Let's define a non-oriented connected graph of n vertices and n - 1 edg…
思路:将黑边标记为1,白边标记为100000,树链剖分 如果查询时ans超过100000,那就有白边,输出-1,不然直接输出ans #include<bits/stdc++.h> #define maxn 800001 #define int long long #define L(x) (x<<1) #define R(x) ((x<<1)|1) using namespace std; int tree[maxn],tag[maxn]; int rev[maxn],…
Description 给定一棵树,有m次操作. 1 x 把第x条边染成黑色 2 x 把第x条边染成白色 3 x y 查询x~y之间的黑边数,存在白边输出-1 Input 第1行为一个整数\(n\),表示有\(n\)个节点. 接下来\(n-1\)行描述一棵树. 第\(n+1\)行为一个整数\(m\)表示有\(m\)次操作. 接下来\(m\)行每行描述一个操作. Output 对于每一个\(3\)操作输出一行. 一眼看到就能发现,这是一个树剖题,还是边权剖分. 需要注意的是边权转点权的时候,边权要…
题目链接G题 题意 序列 \(a_1,a_2,⋯,a_n\) 是一个排列, 当且仅当它含有 1 到 n 的所有整数. 排列 \(a_1,a_2,⋯,a_n\) 是一个有向图的拓扑排序,当且仅当对于每条边 \(u→v\),这个排列中 \(u\) 都出现在 \(v\) 之前. 给定一个有向无环图,添加至多 k 条有向边,使图保持无环,且字典序最小的拓扑排序字典序最大 思路 很有意思的一道构造题. 主要想法就是字典序较大的连边限制字典序小的. 两个堆:一个小根一个大根(小根堆是当前可以填写的节点集合,…
题意: 给一棵树,树的每条边有一种颜色,黑色或白色,一开始所有边均为黑色,有两个操作: 操作1:将第i条边变成白色或将第i条边变成黑色. 操作2 :询问u,v两点之间仅经过黑色变的最短距离. 树链剖分+树状数组 学习树链剖分: /* 树链剖分: 划分轻重链,效果是将一颗树变成了若干段连续的区间. 向上记录边权 */ #include <iostream> #include <cstdio> #include <cstring> #include <cmath>…
1.题目描述 2.问题分析 要遍历图,然后标记没有被复制的节点. 3.代码 class Solution { private: unordered_map<Node*, Node*> m; public: Node* cloneGraph(Node* node) { if (node == NULL) return NULL; Node *copy = new Node(node->val, {}); queue<Node*> q; m[node] = copy; q.pus…
\[ \text{Preface} \] 算是一道思维难度稍易,代码难度稍难的题吧. \[ \text{Description} \] 给出一张 \(n\) 个点,\(m\) 条边的图,点带权.需要支持三个操作: D x 删掉编号为 \(x\) 的边 Q x k 查询与节点 \(x\) 联通的所有节点中,点权第 \(k\) 大节点的点权 C x v 将节点 \(x\) 点权改为 \(v\) 多组数据,每组数据最终需要输出所有查询的平均值 ( 保留 6 位 ) ,没有强制在线. \[ \text{…
图基础 图(Graph)应用广泛,程序中可用邻接表和邻接矩阵表示图.依据不同维度,图可以分为有向图/无向图.有权图/无权图.连通图/非连通图.循环图/非循环图,有向图中的顶点具有入度/出度的概念. 面对图相关问题,第一步是将问题转为用图表示(邻接表/邻接矩阵),二是使用图相关算法求解. 相关LeetCode题: 997. Find the Town Judge  题解 1042. Flower Planting With No Adjacent  题解 图的遍历(DFS/BFS) 图的遍历/搜索…