首页 > TAG信息列表 > 500001

【ybtoj高效进阶 21253】序列修改(分类讨论)(set)(树状数组)

序列修改 题目链接:ybtoj高效进阶 21253 题目大意 给你一个序列,然后一个序列的费用是每个前缀的大小乘里面的数字种类的和。 然后你可以至多修改一个数,费用是原来到现在的绝对值,要你最小化序列费用和修改费用的和。 思路 首先我们可以简单算出一开始不修改的费用,然后考虑修改之后会

单源最短路问题复习

在学习单源最短路之前,首先要了解数组和for循环 for循环 for循环,顾名思义就是循环语句 运行以下代码 #include<iostream> #include<cstring> using namespace std; int main(){ for(int i=0;i<=10;i++){ cout<<i<<' '; } return 0; } 得到      运行以

loj6277~6285.分块入门九讲

loj6278.数列分块入门 2 序列支持区间加,区间查询小于一个数的个数。 先思考怎样维护答案。可以分块后对每个块维护一个 \(vector\),里面是块内排序后的结果。 修改的时候整块直接打标记,散块暴力重构一遍。 查询整块用 lower_bound,散块暴力查询。 块大小 \(\sqrt n\) 时,复杂度 \(O(n

6908. 【2020.11.30提高组模拟】关灯(light)/loj#3385. 「COCI 2020.11」Svjetlo

题目描述 https://loj.ac/p/3385 题解 dp维护路径线条,每次把当前的线条拆开加上新的 设f[i,0/1,0/1/2]表示点i颜色为0/1,下面已固定了0/1/2个端点的答案 分类讨论,注意可以多折一次来改变i和儿子的颜色,走完的儿子颜色必须为1 一开始拓扑求出0的虚树,在上面dp即可 code #include <bits

模板 --单源最短路

模板 --单源最短路 求最短路一般有两种方法,dij,SPFA; 大多数情况下最常用并且最稳妥的就是dij,SPFA一般用于判断负权值和负环,并且如果边较多,SPFA容易被卡死。所以一般情况下都是使用dij。 首先先介绍dij dij算法的主要思想是先寻找一个点A1,将这个点并入一个集合,然后找出与这个点相连

P5658 括号树(贪心)

Miku so crazy 因为把stack的类型写成bool 把自己搞自闭了 思路,显然如果一个点是(,那么不会有贡献,只要压入队列,答案继承父亲就行了 如果是),如果能匹配,就判断(的父亲是什么,如果是),那么显然把根节点到)的父亲的序列中与刚匹配的()相接的部分加上刚匹配的()也是合法的 不考虑刚匹配的()也是合法

2020 GDUT Rating Contest IV F. News Distribution

F. News Distribution 链接 题目描述 有n个人,他们各加入了一些群。给出m条关于某个群有谁的信息。若一个人的群友加入了另一个群,这个人也算加入了另一个群。输出每个人加入的群数(给出信息之前默认每个人已经加入一个群) 题目分析 因为是人与人直接有传递性的关系,套用并查集模

LCA【模板】

#include<iostream>#include<cstdio>using namespace std;struct yyy{ int t, nex;}e[2*500001];int depth[500001],fa[500001][22],lg[500001],head[500001];int tot;void add(int x,int y) //邻接表存树{ e[++tot].t=y; e[tot].nex=head[x]; hea

洛谷 P3627 【抢掠计划】

题库:洛谷 题号:3627 题目:抢掠计划 link:https://www.luogu.org/problem/P3627 思路 : 这道题是一道Tarjan + 最长路的题。首,我们用Tarjan把每个强连通分量缩成一个点,并记录那个强连通分量的点权和(因为当那个人走进一个强连通分量后那个强连通分量中的所有money都会被他拿走(绕一

点的距离

#include <iostream>#include <cstdio>#include <string>using namespace std;int dfn[500001], f[500001][21];int n, m, cnt, root;int head[500001], lg[500001];struct tu { int v, nxt;} e[5000001];void add(int u, int v) { e[++cnt].v = v;

【HNOI 2018】排列

Problem Description 给定 \(n\) 个整数 \(a_1, a_2, \ldots , a_n(0 \le a_i \le n)\),以及 \(n\) 个整数 \(w_1, w_2, …, w_n\)。称 \(a_1, a_2, \ldots , a_n\) 的一个排列 \(a_{p[1]}, a_{p[2]}, \ldots , a_{p[n]}\) 为 \(a_1, a_2, \ldots , a_n\) 的一个合法排列,当且仅当该

最小生成树模板

#include <bits/stdc++.h> using namespace std; const int maxn=500001; int fa[maxn],n,m,ans,s; struct edge{ int x,y,z; }a[500001]; bool cmp(edge x,edge y){ return x.z<y.z; } int find(int x){ if(fa[x]==x) return x; return fa[x]=f