- 2024-11-16P8119 「Wdoi-1.5」幻想乡游览计划
不妨考虑树的情况,对于图只要取一棵生成树即可。\(k\le4n\)是容易的,两个点分别dfs就是\(\le4n\)次。对于\(k\le3n\),考虑一个做法:一个人去遍历整棵树,每次拓展新点时交换。不难证明正确性,次数\(\le3n\)。考虑优化这个策略。注意到其中一个点一直在根,这非常浪费。事实上
- 2024-10-31C++《list》
在本篇当中我们将学习STL中的list,在此list就是我们之前在数据结构学习过的链表,在本篇中我们要来了解list当中的成员函数该如何使用,由于list各个函数的接口和之前学习过的vector类型,因此在学习list的使用就较为轻松。在lis篇章中我们要重点了解的是在下一个篇章当中的list模拟实
- 2024-10-31C++笔记---可变参数模板
1.简单介绍与基本语法可变参数模板是指模板的类型参数列表的的参数个数可变。C++11支持可变参数模板,也就是说支持可变数量参数的函数模板和类模板,可变数目的参数被称为参数包,存在两种参数包:模板参数包:表示零或多个模板参数。函数参数包:表示零或多个函数参数。参数包的
- 2024-10-2920241029
T116248岛屿首先,手模发现任意操作一次即可构造出一组解。于是这题其实是构造题。发现限制等价于每个三角形中两种颜色的边都存在。我们先考虑最外层的一个三角形,也就是一个度数为\(2\)的的点所在的三角形。要保证它里面两种颜色的边都存在,最简单的办法就是把它的两个度数染
- 2024-10-01Codeforces2014E Rendez-vous de Marian et Robin(分层图最短路)
题意给定一个无向图,含有\(n\)个点和\(m\)条边。题解点击查看代码#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;constexpri64inf=1e18;voidsolve(){intn,m,h;cin>>n>>m>>h;vector<vector<
- 2024-09-302024初秋集训——提高组 #23
C.前缀题目描述给定一个字符串\(S\),你会将这个字符串无限循环,即变成\(S+S+S+S+\dots\)。接着给定一个字符串\(T\),你要求最短的一个\(S\)的前缀使得其中存在一个子序列\(T\),若\(T_i=*\),则这一位是什么都可以。但由于\(T\)太长了,所以其中有一些字符后会有数字,表示这个
- 2024-09-29[USACO23JAN] Tractor Paths P 题解
T4[USACO23JAN]TractorPathsP唯二的两道蓝题之一,但难度至少紫黑之间。思路是这篇题解的。首先一个贪心:跳到与当前区间相连的最靠右的区间肯定是最优的,由此倍增易得第一问。重点在于第二问的求解,我们发现这个东西很麻烦,这时候就需要一些寄巧了。具体来说,前人之述备矣。坑点:D
- 2024-09-29CF1268E Happy Cactus 题解
Description给定一张仙人掌图,第\(i\)条边连接\(u,v\),边权为\(i\)定义路径为"HappyPath"当且仅当其满足沿途边权递增。定义点对\((u,v)\)Happy当且仅当存在一条HappyPath以\(u\)为起点,\(v\)为终点。对于\(u=1,2...n\),求满足\((u,v)\)Happy的\(v\)的数量
- 2024-09-18push_back和 emplace_back背后的逻辑
push_back与emplace_back的区别push_back:功能:将一个对象(或其副本)添加到vector的末尾。参数:接受一个对象(或其副本)的引用。过程:如果传入的是一个临时对象或一个已有对象,push_back会创建该对象的副本(或者通过移动构造函数将其移动到vector中)。可能会涉及到复制构造
- 2024-09-09题解:P3968 [TJOI2014] 电源插排
题意维护一个\(01\)串,初始均为\(0\),支持:单点将\(1\)修改为\(0\)。查询区间中\(1\)的个数。查询最长且最靠右的连续\(0\)段的靠右的中点,并将其改为\(1\)。分析第一个操作和第二个操作显然使用动态开点线段树维护。我们只需要解决第三个操作。我们用平衡树存储
- 2024-08-30P6192 【模板】最小斯坦纳树 题解
Description给定一个包含\(n\)个结点和\(m\)条带权边的无向连通图\(G=(V,E)\)。再给定包含\(k\)个结点的点集\(S\),选出\(G\)的子图\(G'=(V',E')\),使得:\(S\subseteqV'\);\(G'\)为连通图;\(E'\)中所有边的权值和最小。你只需要求出\(E'\)中所有边的权值
- 2024-08-24P3547 [POI2013] CEN-Price List 题解
Description给定一个\(n\)个点\(m\)条边的无向图,边权均为\(a\)。现在将原来图中满足最短路等于\(2a\)所有的点对\((x,y)\)之间加一条长度为\(b\)的无向边。给定\(k\),求点\(k\)到所有点的最短路是多少。\(1\leqn,m\leq10^5\)。Solution首先有个显然的结论是
- 2024-08-17AtCoder Beginner Contest 367
喜欢我\(\log_210^{18}=18\)吗?A#include<bits/stdc++.h>#defineebemplace_back#defineepemplaceusingnamespacestd;usingll=longlong;inta,b,c;intmain(){ cin.tie(0)->sync_with_stdio(0); cin>>a>>b>>
- 2024-08-08C++ Rect And Point Search Algorithm
测试 ////Createdbywwwon2024/8/8.//#include"include/cxstructs.h"#include"include/cxml/k-NN.h"//可扩展Rect内搜索子Rect或PointvoidtestRectSearch(){usingnamespacecxstructs;std::random_devicerd;std::mt19937gen(rd()
- 2024-07-28CF626G Raffles 题解
Description有\(n\)个奖池,第\(i\)个奖池的奖金是\(p_i\),已经有\(l_i\)张彩票押在上面。现在你有\(t\)张彩票,你需要将你的彩票分配到这些奖池中,并且保证你在每个奖池中押的彩票数不能超过该奖池原有的彩票数。若你在第\(i\)个奖池中押了\(t_i\)张彩票,则你中奖的概
- 2024-07-282024牛客暑期多校训练营3
A.BridgingtheGap2题目大意:有n个人要划船过河(只有一艘船),每个人有\(h_i\)的体力,每次划船最少要L人,最多R人,划船要消耗船上所有人1的体力,问存不存在一种方案可以让所有人过河。思路:首先除了最后一次,前面的都需要有L人把船开回来,所以要有L人体力大于三,即可以算出一共需要\(t=\l
- 2024-07-26C++11 emplace系列函数:性能提升的秘密武器
C++11引入的emplace系列函数(如emplace_back、emplace、emplace_hint等)为STL容器提供了一种更高效的元素插入方式。这些函数不仅可以提高代码的性能,还能让我们的代码更加简洁优雅。今天,我们将深入探讨emplace函数的优势,并通过实例来展示它们的强大之处。emplace函数的主要优势
- 2024-07-21Loj P10064 黑暗城堡 题解 最短路径树记数
这道题是一道最短路径树问题。首先,什么是最短路径树呢?定义一个图的最短路径树表示一个图上的生成树,且根节点到图上任一点的距离等于原图上两者之间的距离。而不难发现,题目其实是在求图上最短路径树记数。首先,建出最短路径树。枚举每条边,判断边两个端点到根的距离之差是否为
- 2024-07-18c++中push_back和emplace_back
push_back 和 emplace_back 都是用于在容器(如 std::vector, std::deque 等)的末尾添加元素的方法,但它们在实现细节和性能上有显著区别:构造方式:push_back 首先在容器外部构造一个完整的对象,然后将这个对象移动或拷贝到容器的末尾。emplace_back 直接在容器管理的
- 2024-07-05算法学习笔记(24):卡常小技巧
卡常学习来源->https://platelet.top/hpc/oldst表访问连续性就不说了,考虑计算log2。预处理比31^builtin__clz(x)慢,而且慢很多。setinsert(pos,x)如果\(pos\)是\(x\)在set中正确的位置,那么insert是\(O(1)\)的。erase(it)是\(O(1)\)的。prev(it)
- 2024-07-02C++ STL 优先队列 (priority_queue)
std::priority_queue<queue>优先队列 1、第一个元素始终为最大元素。 2、有着类似于堆的特性,它可以在其中随时插入元素。 3、支持下标访问(随机访问迭代器)优先队列内部的实现需要依赖基础容器,该容器应可通过随机访问迭代器访问,并需要支持以下操作empty()si
- 2024-06-05GCD-sequence(Round 950)
#include<bits/stdc++.h>#defineendl'\n'usingll=longlong;typedefunsignedlonglongull;usingnamespacestd;voidGordenGhost();signedmain(){#ifdefGordenfreopen("in.txt","rt",stdin);freopen
- 2024-06-03C++的vector使用优化
我们在上一章说了如何使用这个vector动态数组,这章我们说说如何更好的使用它以及它是如何工作的。当你创建一个vector,然后使用push_back添加元素,当当前的vector的内存不够时,会从内存中的旧位置复制到内存中的新位置,然后删除删除旧位置的内存,也就是说当我push_back,vector容量不够
- 2024-05-30QOJ 6537 One, Two, Three
令原题中的\(1,2,3\)分别对应\(0,1,2\)。一种贪心想法就是直接记录\(0,2,01,21,012/210\)的个数然后直接配对。但是考虑到如果当前的\(1\)前面既有\(0\)也有\(2\),后面不管是\(0\)还是\(2\)都能配对。但是按照先前的策略肯定会成为\(01\)或\(21\),这
- 2024-05-26Effective ModernC++条款42:考虑使用置入代替插入
更多C++学习笔记,关注wx公众号:cpp读书笔记Item42:Consideremplacementinsteadofinsertion如果你拥有一个容器,例如放着std::string,那么当你通过插入(insertion)函数(例如insert,push_front,push_back,或者对于std::forward_list来说是insert_after)添加新元素时,你传入的元