链接:2021 ICPC Asia East Continent Final 三题铁,四题罚时少银,罚时多铜 A. DFS Order 以1为根求树上每个点的最小dfs序和最大dfs序,一个点的最小dfs序是该点深度,用\(cnt_i\)表示以\(i\)这个点为根的树上点的个数,一个点的最大dfs序是\(n+1-cnt_i\)。 E. Prof. Pang and Poker 三个人
需要处理输入的 Flood Fill 点击查看代码 #include<bits/stdc++.h> using namespace std; typedef long long LL; const int N = 1000 + 10; #define x first #define y second int n, m; int g[N][N]; bool st[N][N]; int dx[] = {0, -1, 0, 1}; int dy[] = {-1, 0, 1,
namespace Fhq_Treap { int ch[N][3], siz[N], val[N], cnt, rnd[N]; inline void update(int x); inline int newnode(int x); inline int Kth(int now, int k); inline void split(int now, int k, int &x, int &y); inline int merge(int A, int B); inline voi
记 \(f_i\) 表示 \([i,n]\) 中最多能不动的书。 动第 \(i\) 本书,则 \(f_{i+1}->f_i\) 不动的话,若这本书是最左边的这种书,则 \(f_{r_{a_i}+1}+cnt_{a_i}->f_i\)。 若不是,为了不影响其他区间,则 \(cnt_{a_i}->f_i\)。 #include<cstdio> const int H=5000050; char G[H],*_=G; int rea
\(\texttt{Rating Change:}\color{orange}{2213}\color{black}\to \color{orange}{2225}\) \(\Delta={\color{green}{\texttt{12}}}\qquad \texttt{rank:510}\) 最近质量最高的一场 Chinese Round 吧。 A 可以转化成每次将前面两个中选一个留下。这样也就是说只有 \(b\) 的第一位
真是太难过了,想了一早上 T1,但还是处在会和不会的边缘,尽早退役尽早退役。 T1 给定一个根为 \(1\)、\(n\) 个节点的树,每个节点初始无色。一次操作可以选定一个点 \(i\),将 \(i\) 子树内的所有点覆盖为任意颜色。求将所有叶子变为指定颜色的最少操作次数。 \(n \leq 2\times 10^6\)。
P1195 将最小生成树的cnt==n-1改为cnt==n-k即可 还是板子题 #include <bits/stdc++.h> using namespace std; #define MAX 100000000 int n, m, k; struct node { int a, b, c; } edges[MAX]; bool cmp(node x, node y) { return x.c < y.c; } int parent[MAX]; int fi
There are m stones lying on a circle, and n frogs are jumping over them. The stones are numbered from 0 to m − 1 and the frogs are numbered from 1 to n. The i-th frog can jump over exactly ai stones in a single step, which means from stone j mod m to ston
C. Train and Queries 思路: 开一个map记录一个数字出现的最小坐标和最大坐标 #include <bits/stdc++.h> using namespace std; typedef pair<int, int> PII; const int N = 200010; int n, k; PII a[N]; int main() { int T; cin >> T; while(T -- ) {
主要内容: 1.可持久化线段树2.树状数组3.倍增求LCA4.树上差分5.树链剖分:重链剖分、长链剖分6.dfs和bfs基本应用7.搜索的最优性、可行性、记忆化剪枝8.迭代加深搜索9.二进制搜索10.折半搜索 (今天先介绍两种,因为其他八种本蒟蒻上课没听懂) 可持久化线段树 定义: 可持久化线段树又被
CSPJS的第一年,也是C++洛谷初赛题解CSPJ部分的最后一期,那就是2019年。这期会对C++洛谷初赛题解专栏内容做出一些调整。 第一题 题目与选项: 中国的国家顶级域名是() A. .cn B. .ch C. chn D. china 答案与解析: A 典型的国家顶级域名有.cn (中国)、.us (美国)、.uk(英国)、.jp (日本)
树的计数 已知每个点的度数,求满足条件的树的个数。 思路 对于无标号图的计数,考虑 \(prufer\) 序列。 注意到 \(prufer\) 序列的性质:在 \(prufer\) 序列中,顶点出现的次数就是其度数 \(-1\) 。于是,可以直接利用多重集的排列数得出结论: \(\displaystyle ans = \frac{(n-2)!}{(d_1-1)(
Solution 感谢同学对这个题的精彩讲解! 设 \(f_{i,S_1,S_2}\) 表示处理完前 \(i\) 行,第 \(i+1\) 行的“突起”状态为 \(S_1\),第 \(i+2\) 行的“突起”状态为 \(S_2\)。 转移时,我们设第 \(i\) 行的状态为 \(S\),第 \(i-1\) 行 “突起”到第 \(\bm{i+1}\) 行 的状态为 \(S_0\),那么我们
原文链接 链式前向星是一种以存边的方式储存图的数据结构,经常在各种竞赛中使用。 链式前向星储存的每个边由三个变量储存:\(to\),\(v\),\(nxt\)。 其中,\(from\)和\(to\)代表这条边连接的两个点,\(v\)代表这条边的权值,\(nxt\)代表同一个\(from\)的下一条边 我们一般用一个\(head\)数
原文链接 一、求正权图的单源最短路 对于求正权图的单源最短路问题,我们一般使用Dijistra算法求解 Dijistra算法 Dijistra算法的基本思想是贪心。 我们可以先把所有点的距离设为一个无穷大的数,然后将起始点的\(dis\)设为一,每次找一个\(dis\)最小并且没有被标记过的点,然后将这个点
背包问题 体面一般是给你n个物品,体积为m的背包,每个物品的体积为v[i],价值w[i],求这个背包可以装的最大价值。 1.dp问题的分析思路。 1.状态表示有表示当前状态下的集合里面某个属性的最优解。属性一般就是最大值,最小值,数量。 2.状态计算就是考虑如何把当前集合划分为更小的子集,然
素数筛法 1.埃氏筛法 这个方法就是利用质数的倍数必然不是质数来解决的。然后每一次都会把这个质数后面所有的数都筛一遍 #include<iostream>using namespace std;const int N=1e8+100;int n,prime[6000000],cnt,q;bool isprime[N];void judge(int n){ for(int i=2;i<=n;i++){/
topsort 拓扑排序针对的是有向无环图,可以输出一个起点一定在终点前面的序列 核心思想就是先将入都为0的点先存入队列,然后再每次出队一个点,把他的所边的终点入度减一,如果这个点入度也为0了,那就加入队列,如果最后队列中只有n个元素就是对的 #include<iostream>using namespace std;
题目链接 依旧是很裸的题干 题干很清楚,肯定是图论 一开始想到单源最长路,用贝尔曼福德算法,全部边权变成相反数,后来发现不可行 因为这个题目要找的路径是边权最小值最大 最小值最大——二分 但是如果对于每个询问都二分一次再check,复杂度来到了O(n2logn)无法接受 (题解里好像有对询
分析 首度。我开vector,开map 都是tle,改成数组和cnt 计数就对了。 //-------------------------代码---------------------------- #define int ll const int N = 1e5+10; int n,m,primes[N],cnt; bool st[N]; int qmi(int a,int b) { int res = 1; while(b) {
1,2,3,4,5,6,7,8,9,10,11,12 1002 模拟,把所有std::make_tuple忽略掉即可。 #include<bits/stdc++.h> using namespace std; typedef long long ll; ll read() { ll x;scanf("%lld",&x);return x; } string s; int main() { for(int t=read();t;t--) {
题目链接:F - Sorting Color Balls (atcoder.jp) 题意: 有n个球,球有颜色和数字。对相邻的两球进行交换时,若颜色不同,需要花费1的代价。求将球排成数字不降的顺序,所需的最小代价。 思路: 将完成排序所需的最小代价记作 cost,将颜色不同的逆序对( i < j && xi > xj && ci ≠ cj )数量
题目描述 给出一个正整数a,要求分解成若干个正整数的乘积,即a = a1 * a2 * a3 * ... * an,并且1 < a1 <= a2 <= a3 <= ... <= an,问这样的分解的种数有多少。注意到a = a也是一种分解。 输入格式 第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整
https://ac.nowcoder.com/acm/contest/33187/D 建边 \((b,d,c/a)\),那么会无限就说明有一个环边积大于 0 的环。 化积为和,对于边权都取 \(\log_2\),那么二分 \(w\),将每条边的边权变为 \(e[i].w-w\),那么变为是否有一个环边和大于 0,考虑并不是很好做,于是对于所有边都取相反数,那么就是
第4章 差分约束系统 算法简述 核心思想:将题目给定条件转化为形如\(s[i] - s[j] <= k\)的三角形不等式,然后用最短路求解 解题要点:感觉还是<=跑最短路好写点,据此, 在取\(a[i] - a[j] <= k\)的形式时,规则如下: 差分约束跑最短路,跑出的结果是所有解中的最大解 差分约束跑最长路,跑出的结