随笔分类 - 题解
摘要:圆方树的定义 圆方树是用来解决仙人掌图的问题的,那什么是仙人掌图呢? 即不存在边同时属于多个环的无向连通图是一棵仙人掌。 点双连通分量的定义 要介绍圆方树,首先要介绍点双连通分量。 一个点双连通图的一个定义是:图中任意两不同点之间都有至少两条点不重复的路径。 一种简单的定义:不存在割点的图。 但这种
阅读全文
摘要:圆方树的定义 圆方树是用来解决仙人掌图的问题的,那什么是仙人掌图呢? 即不存在边同时属于多个环的无向连通图是一棵仙人掌。 点双连通分量的定义 要介绍圆方树,首先要介绍点双连通分量。 一个点双连通图的一个定义是:图中任意两不同点之间都有至少两条点不重复的路径。 一种简单的定义:不存在割点的图。 但这种
阅读全文
摘要:圆方树的定义 圆方树是用来解决仙人掌图的问题的,那什么是仙人掌图呢? 即不存在边同时属于多个环的无向连通图是一棵仙人掌。 点双连通分量的定义 要介绍圆方树,首先要介绍点双连通分量。 一个点双连通图的一个定义是:图中任意两不同点之间都有至少两条点不重复的路径。 一种简单的定义:不存在割点的图。 但这种
阅读全文
摘要:题目大意 给出一个无向连通图,让你改造成一个有向图,并保证强连通。 解题思路 先思考,将无向图改成有向图,需要顾及到一些割边,因为把割边删掉后,原图就不联通了,所以改造后的有向图需要完整的保留割边。 而对于不是割边的边,我们只需要保留一条边,可以在 tarjan 时,记录下来。 需要注意的:多测不清
阅读全文
摘要:原题传送门 题目大意 给定一棵 nnn 个点的树,边具有边权。要求作以下操作: DIST:询问点 aaa 至点 bbb 路径上的边权之和。 KTH:询问点 aaa 至点 bbb 有向路径上的第 kkk 个点的编号。 有多组测试数据,每组数据以 DONE 结尾。 解题思路 前置知识:树上差分,树上倍增
阅读全文
摘要:题目大意 给定一个 nnn 个点 mmm 条边的无向图,问最少删掉多少条边能使得编号小于等于 kkk 的点都不在环上。 解题思路 对于这种判断无向图有没有环的题,一般可以想到用并查集维护。 首先可以判断出,对于一条边 u→vu \to vu→v,若 u>ku>ku>k 且 v>kv>kv>k,则它肯
阅读全文
摘要:原题传送门 题目大意 输入 mmm 个长度均为 nnn 的 DNA 序列,求一个 DNA 序列,该序列能满足到 mmm 个序列的总距离最小。 两个等长字符串的距离定义为字符不同的的位置的个数,例如,ACGTACGTACGT 和 GCGAGCGAGCGA 的距离为 222(第 111、第 444 位置
阅读全文
摘要:原题传送门 题目大意 根据宪法,Byteland 民主共和国的公众和平委员会应该在国会中通过立法程序来创立。 不幸的是,由于某些党派代表之间的不和睦而使得这件事存在障碍。 此委员会必须满足下列条件: 每个党派都在委员会中恰有 111 个代表。 如果 222 个代表彼此厌恶,则他们不能都属于委员会。
阅读全文
摘要:原题传送门 题目大意 有 nnn 个王子和 nnn 个女孩,每个王子可能喜欢多个女孩。先给出一个初始的完备匹配,问每个王子可以选择哪些女孩,即无论王子选择这些女孩中的哪一个,使得剩下的王子仍能够选择喜欢的女孩。 解题思路 比较裸的 Tarjan。 建图: 连一条从王子到他喜欢的女孩的有向边。 连一条
阅读全文
摘要:原题传送门 Tarjan 算法 1. 什么是 Tarjan Tarjan 算法是一种用于求解有向图的强连通分量的算法,时间复杂度为 O(n+m)O(n + m)O(n+m)。它可以求出每个强连通分量的大小、属于其的顶点和强连通分量的总数。 2. 认识 dfs 生成树 dfs 生成树处理强连通分量的一
阅读全文
摘要:原题传送门 适合树剖新手做的题,代码简单,思路稍微有点难理解,便于新手提升水平。 题目大意 给定一棵树,请你给出一种剖分方案(即输出所有结点的重儿子,剖分方案其实就是指对重儿子的判定规则),使所有询问操作总共访问的轻重链总条数最小,由于可能有许多合法方案,请任意输出一种。 解题思路 前置知识: 倍增
阅读全文
摘要:原题传送门 题目大意 给出一个长度为 nnn 的序列 hhh,和每一个数的 valvalval ,请将 hhh 分成若干段,满足每段数字的 valvalval 之和都不超过 mmm,最小化每段的最大值之和。 解题思路 首先分析题意,得到动态转移方程: fi=min(fj−1+max(hj∼hi))
阅读全文
摘要:原题传送门 题目大意 给出一个长度为 nnn 的序列 hhh,请将 hhh 分成若干段,满足每段数字之和都不超过 mmm,最小化每段的最大值之和。 解题思路 首先分析题意,得到动态转移方程: fi=min(fj−1+max(hj∼hi)) (∑k=jihk≤m)f_i=min(f_{j-1}+max
阅读全文
摘要:题目大意 给你一个 dfs 序和一个 bfs 序,求所有满足这两个序的树的高的平均值( 保留三位小数 ),输入保证至少存在一棵树符合给定的两个序列。 解题思路 首先可以从 bfs 序入手,因为更具 bfs 序的性质,可以发现 bfs 序可以分成 xxx 个段,每一段中的节点都是在同一行中,而这棵树
阅读全文
摘要:题目大意 给你一个序列 aaa , 选择排列中的任意一段区间 [l,r][l,r][l,r],求将序列 aaa 从小到大排序最少需要排序多少个数。 解题思路 每次输入一个数 xxx ,将其与当前遍历的编号 iii 求最大和最小值。 再用一个差分数组,将区间 [mmin,mmax][mmin,mmax
阅读全文
摘要:解题思路 简单的数论题 简单的构造一下就行 AC CODE #include <bits/stdc++.h> long long INF = 1e18, mod; int main() { scanf("%lld", &mod); printf("%lld %lld\n", mod - INF %
阅读全文
摘要:题目大意 如题所述,找第一个只出现一次的字符,用一个桶记录出现次数就能完成了。 解题思路 用一个桶记录出现次数。 顺序遍历,如果一个字母的出现次数为 111,就直接输出。 AC CODE #include<bits/stdc++.h> using namespace std; string s; i
阅读全文
摘要:本题传送门 题目大意 给出一棵树,要求你为树上的结点标上权值,权值可以是任意的正整数。 唯一的限制条件是相临的两个结点不能标上相同的权值,要求一种方案,使得整棵树的总价值最小。 解题思路 本题相当于一个染色问题。 本蒟蒻开始以为是 121212 染色。(危 其实可以有一组 Hack 数据。 数据1
阅读全文
摘要:本题传送门 题目大意 给出一棵树,要求你为树上的结点标上权值,权值可以是任意的正整数。 唯一的限制条件是相临的两个结点不能标上相同的权值,要求一种方案,使得整棵树的总价值最小。 解题思路 本题相当于一个染色问题。 本蒟蒻开始以为是 121212 染色。(危 其实可以有一组 Hack 数据。 数据1
阅读全文
摘要:传送门 拓扑排序 关于拓扑排序,这里不叙述太多,可参考本人CSDN。 值得注意的是,这不是一棵树吗? FJ 发现对于牛奶来说有一种最多的方式从一个接口流到另一个接口。并且由于 FJ 是一个高效率的人,他需要确保每一个管道都有牛奶经过,也就是说,没有多余的管道。 所以,对于牛奶来说,最多只有一种方式从
阅读全文