Luogu P4524 Ceste 题解】的更多相关文章

题目链接:https://www.luogu.org/problemnew/show/P3946 交好几遍是因为虽然能过一直有提醒..强迫症qwq #include <bits/stdc++.h> #define ll long long using namespace std; const int maxn = 5 * 1e6 + 10; ll n, m, s, t, g, q; ll dis[maxn], h[maxn], l[maxn]; bool vis[maxn]; struct e…
其实这题吧...有一种玄学解法 这题的要求的就是一个最小化的顺序 那么,我们就不进想到了一种显然的写法 就是random_shuffle 什么?这不是乱搞的非正解吗 然而,正如一句话说的好 一个算法,如果你无法将他卡到错误,那么他就是对的 所以,就产生了下面的科学随机写法 随机化顺序,模拟过程,取ans最小值 code #include<bits/stdc++.h> using namespace std; const int MAXN=20; void file(string s){freo…
题目大意 给定一棵树,边带权,问有多少点对满足二者间距离$\leq K$,$n \leq 40000$. 题解 点分治专题首杀!$Jackpot!$ (本来看着题意比较简单想捡个软柿子捏,结果手断了……) 点分治的总结先鸽着,这里只说题解. 分析一下题目: 对于无根树上的某一节点x,如果把它看作根,树上的路径无非两类: 1.经过x. 2.不经过x,但在它的子树里. 显然,后者利用点分治的思想经过递归处理可以转化为前者,那么我们就只需考虑第一类, 这也是点分治的强大之处. 我们设$dis[]$为节…
前言: 当时考场上并没有想出来...后来也是看了题解才明白 解析: 大家(除了我)都知道,奇点和偶点会成对出现,而出现的前提就是建筑的高度突然发生变化.(这个性质挺重要的,我之前没看出来) 所以就可以扫一遍,然后就搞定了. 然后还有一个小点,要把每个区间搞成左闭右开,否则碰到诸如 (3,7,5)和(5,8,9) 这样的数据,中间的空隙就不会被计算. 然后写个线段树维护一下就ok了 代码 #include <bits/stdc++.h> using namespace std; const in…
题目传送门 [题目大意] 给定一个n×n的点方阵,求站在左下角的点能看到的点数 注意同一条直线上只能看到一个点 [思路分析] 因为是一个方阵,所以可以对称地算,那么对于半个方阵,这里假设是左上的半个方阵,能看到的点的个数要满足这样的条件 1.x<y 因为是左上的半个方阵,并且x=y的一直线上的点要额外计算 2.gcd(x,y)即x与y互质 这是为了保证一直线上只能看到一个点 容易发现,在满足条件的情况下,这样的x个数恰好等于φ(y) 还需要注意的一点是,最左边一列,最下面一行,还有x=y这条直线…
一道不是十分水的\(dp\). 首先我们考虑\(dp\)方程的构造.起初我定义的状态是\(dp_{i,j}\)表示前\(i\)个格子,总共跳了\(j\)次的最大得分.但事实上它并不可以转移,因为我们不知道新的一轮操作从之间的哪个格子算起. 那么状态转移方程就出来了,我们把第一维改成本次跳到第\(i\)个格子上,包括本次在内总共跳了\(j\)次的最大得分,那么转移的时候,由于本次一定要跳到\(i\)上(如状态中所定义),所以不用分类讨论.方程就是:\[dp_{i,j}=\max\{dp_{k,j-…
差不多是Dijkstra的裸题吧... 这道题可以分为来回两个阶段. 去的时候很简单,直接用一次Dijkstra,然后统计答案. 回来的时候就有些巧妙了,虽然表面上是每个点回到起点,但是何尝不可将其看成从起点出发,逆着每个点过来的路去找一次每个点?所以只需要存边的时候处理一下,然后直接跑Dijkstra就行了. 附上代码. #include<bits/stdc++.h> #define clean(a,i) memset(a,i,sizeof(a)) #define ll long long…
加工生产调度 题目描述 某工厂收到了 n n n 个产品的订单,这 n n n 个产品分别在 A.B 两个车间加工,并且必须先在 A 车间加工后才可以到 B 车间加工. 某个产品 i i i 在 A.B 两车间加工的时间分别为 A i , B i A_i,B_i Ai​,Bi​.怎样安排这 n n n 个产品的加工顺序,才能使总的加工时间最短. 这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在 A.B 两车间加工完毕的时间. 输入格式 第一行仅-个整数 n n n,表示产品的数…
题目链接 luogu P3952 时间复杂度 题解 直接模拟即可 注意不要直接return 我真是naive ...... 代码 #include<map> #include<stack> #include<cstdio> #include<cstring> #include<algorithm> #define rep(a,b,c) for(int a = b;a <= c;++ a) #define gc getchar() #defi…
传送门 官方题解(证明都在这) 神仙题鸭qwq 转化模型,发现这题本质就是一个集合,每次可以加上集合里的数,问可以拼出多少不同的数 首先暴力需要膜意义下的最短路,例题戳这 然后这个暴力可以优化成N^2的.具体操作是枚举每个数,然后从某个点只用这个数往后跳,这样在膜m意义下可以形成\(gcd(a,m)\)个环.每个环找到dis最小的点,从这个点开始依次遍历整个环,更新后一个位置 有个结论是集合中的数可以分成\(logn\)个等差数列,所以可以每个等差数列贡献答案 然后对于每个等差数列,先把膜m意义…