ICode9

精准搜索请尝试: 精确搜索
  • 【题解】「JOI 2015 Final」JOI 公园2022-08-07 10:33:41

    Description Solution Code #include <cstdio> #include <algorithm> #include <queue> #define int long long using namespace std; const int MAXN = 1e5 + 10, MAXM = 4e5 + 5, INF = 1e18; int n, m, C; int head[MAXN], nxt[MAXM], ver[MAXM], edge[

  • P1821 [USACO07FEB] Cow Party S2022-08-04 08:00:31

    https://www.luogu.com.cn/problem/P1821图论,最短路黄色题 思路: 主要就是比模板多了一个反向建图 我们首先想到的是从每个点都求一遍到终点的最短路,这样会加大时间复杂度。 所以,我们可以反向建图,直接把单终点最短路转为单源最短路,只需要跑两次最短路算法,显然是稳过的。(可以自

  • [CF446B]DZY Loves Modification 题解2022-06-18 13:02:00

    传送门QAQ Preface 很不错的一道题,学到了遇到瓶颈时思考的方法。 Analysis 首先要发现一个东西:行上的操作对所有列的影响是等效的,列同理。 那么就有了一个朴素的贪心思路:用优先队列求出当前和最大的行或列,处理一下答案。 但稍微想一下就能发现,如果有大小相同的行和列,那就相当不好

  • 洛谷 P6822 - [PA2012]Tax(点转边+最短路)2022-05-06 11:04:59

    洛谷题面传送门 套路题一道。 首先直接抛出建图方式: 边化点,点转边。将每一条无向边 \(e=(u,v,w)\) 拆成一正一反两条有向边 \(e_1,e_2\),然后在 \(e_1,e_2\) 之间连权值为 \(w\) 的边。 对于每个点,将所有与其相连的边按权值从小到大排序,然后对于权值相邻的两条边 \((e_1,w_1),(

  • CF292D Connected Components 题解2022-04-14 21:04:18

    这道题给各位一种与之前不一样的做法。 首先显然可以使用并查集维护连通块个数,但是我们知道并查集 不支持删除,而题目是 区间询问,所以: 不支持删除+区间询问=回滚莫队! 所以这道题可以用回滚莫队通过,没学过的可以看看 这篇博文。 那么对于这题,取块长 \(block = n^{\frac{2}{3}}\),对所

  • 3.30省选模拟2022-03-30 22:32:49

    开局\(MTT\)优化\(dp,\)跳,\(dp\)计数,跳,虚树\(dp,QAQ,\)昨天是数学场,今天搁这\(dp\)场呢 看题解都能看自闭... \(T1\) 考场上很容易转化到取石子,转化成阶梯博弈就好了,然后至于优化\(dp,\)使用\(MTT\)就好了 于是乎,我前几天看的一个博客,讲了除了阶梯博弈的所有博弈,看了一

  • 第62期:图论-最小生成树-Boruvka算法2022-03-18 19:32:03

    参考: Boruvka算法 - lher - 博客园 Boruvka算法_weixin_30527323的博客-CSDN博客 最小生成树的Boruvka算法__shivering_的博客-CSDN博客_boruvka算法 【模板】最小生成树题解 - 洛谷 1.【模板】最小生成树 - 洛谷 #include<bits/stdc++.h> using namespace std; const int MAXN

  • Luogu P5897 [IOI2013]wombats2022-03-08 23:33:21

    Luogu P5897 [IOI2013]wombats ​ 为了统一记号,下文设矩形的行数为 \(n(\le 5000)\),列数为 \(m(\le 200)\),更新次数为 \(U(\le 500)\),查询次数为 \(Q(\le 2\times 10^5)\)。 ​ 最暴力的想法是每一次查询时直接DP,时间复杂度为 \(\mathcal O(Qnm^2)\)。这显然过不去,考虑优化。 ​

  • CF817D Imbalanced Array/Namomo Camp 每日一题 Day 1子串的最大差2022-02-26 19:04:38

    Namomo Spring Camp 每日一题Day 1 子串的最大差 Problem Statement 给你一个长度为\(n\)的数组\(a_{1,\dots,n}\)求:\(\sum_{l=1}^n\sum_{r=l}^n\max\limits_{l\leq i\leq r}\{a_i\}-\min\limits_{l\leq i\leq j}\{a_i\}\). Solution 我们考虑拆贡献分别计算: \(\sum_{l=1}^n\sum

  • dsu on tree2022-02-16 14:00:07

    算法简介 \(\quad\)前置知识:树链剖分 \(\quad\)dsu on tree 利用了树链剖分将重儿子先剖出来,然后在查询的时候先遍历轻儿子,然后将轻儿子所求的值删去(以免影响它的兄弟),最后求出重儿子,重儿子的贡献值因为是最后一个,所以不用清空,最后如果本节点是轻儿子,则清空自己,本节点是重儿子,则保

  • [HAOI2010]计数题解2021-11-27 16:32:04

    题目

  • ABC222 D - Between Two Arrays(dp,差分优化)2021-10-15 15:35:16

    题意: 解法: d[i][j]表示前i个数,c[]末尾为j的方案数. 设l=a[i],r=b[i]. 发现每次转移需要将d[i][j]加到d[i+1][]的一个区间, 那么复杂度就变成O(n^3)的了. 但是由于是连续区间,所以可以用差分优化以下, 复杂度就降为O(n^2)了 code: #include<bits/stdc++.h> // #define MULT

  • NFLSOJ #10319. -「2020联考北附2」碎梦(NTT+对角化)2021-10-05 14:34:21

    题面传送门 一个奇怪的解法,时间复杂度比标算少一个 \(k^2m\) 所以建议把数据范围加强到 \(k=300,m=3\times 10^4\),8s 时限把标算卡掉(bushi) 首先考虑部分分解法。对于 \(m=100\),注意到转移可以写成矩阵的形式,具体来说记 \(A=\begin{bmatrix}0&1&0&0&\cdots&0&0\\0&1&1&0&\cdots&0&0

  • CF2800 722F Cyclic Cipher 题解2021-08-22 01:02:46

    令当前时间为 \(t\),则序列 \(i\) 取的到 \(j\) 需满足的条件为:\(t\equiv j \pmod {len_i}\)。 多个同余方程要一起考虑,不难想到 excrt(扩展中国剩余定理)。 考虑枚举具体的数字(\(1\sim m\)),遍历 \(1\sim n\),肯定不可能把 excrt 跑完。(这样优化空间很小) 那就只能对于一段序列,元素两两

  • 【缩点 动态规划】JZOJ_4253. 【五校联考7day2】QYQ在艾泽拉斯2021-08-09 22:03:01

    题意 给出一个图,上面有若干连通块。 对于每个连通块,为有向边组成的图,每个点上有点权。 最多在\(K+1\)个连通块操作,使得遍历这个连通块获得的点权之和最大。 思路 将每个连通块上的环缩点,变成一个DAG然后dp即可。 代码 #include <queue> #include <stack> #include <cstdio> #inclu

  • noip模拟322021-08-07 21:32:40

    \(\color{white}{\mathbb{山高而青云冷,池深而蛟穴昏,行以慎步,援以轻身,名之以:落石}}\) 开题发现 \(t1\) 80分特别好写,于是先写了 但是这个做法没有任何扩展性,导致一直没有往正解的方向想 \(t3\) 看见有点的坐标,以为是计算几何,于是写完 \(t1\) 打了个暴力就看 \(t2\) 了 但事实证明

  • Codeforces1555 D. Say No to Palindromes(思维,前缀和)2021-07-31 17:31:25

    题意: 解法: 根据题目要求,aa不能出现,aba也不能出现, 那么任意三个连续字符,一定两两不同, 此时只需要确定前三个字符,那么后面的所有字符都是确定的. 枚举前三个字符的变化组合, 对于第num种组合,计算出sum[num][i]表示 [1,i]变化了多少次. 对于每组询问,枚举组合i,那么mi

  • 【POJ2195】Going Home2021-07-31 12:02:20

    题目 解析: 本质是个二分图带权匹配问题,建图后用费用流实现即可。 code: #include <iostream> #include <algorithm> #include <cstdio> #include <queue> #include <cstring> using namespace std; const int Maxn=205; const int Maxm=10205; const int inf=1e9; int n,m

  • HH去散步2021-07-28 23:34:35

    题目link:https://www.luogu.com.cn/problem/P2151 Part0: 注意题目有重边。 Part1: 首先这道题的题目限制为走过一条边不能按原边返回,这就导致了这个图的有向性,从而得出需要拆边的结论。 Part2: 拆完边后,容易看出如果要想满足题目限制,那么相当于走过第 $i$ 条边后,除了 $i$ 的反向

  • 浅谈dsu on tree2021-07-26 21:31:18

    前言:dsu on tree利用了树链剖分将重儿子先剖出来,然后在查询的时候先遍历轻儿子,然后将轻儿子所求的值删去(以免影响它的兄弟),最后求出重儿子,重儿子的贡献值因为是最后一个,所以不用清空,最后如果本节点是轻儿子,则清空自己,本节点是重儿子,则保留,依次。 dsu on tree利用了重儿子的性质,尽量

  • 分块2021-07-24 23:33:22

    此博客仅供分块思想入门使用,如果需要进一步地了解分块,请前往笔者的 这篇博文 基本概念 分块是一种经过优化的暴力算法,它将一个长度为 \(n\) 的数组分成尽量平均的若干块,每块的长度称为块长。因为通常情况下把区间分成块长为 \(\sqrt{n}\) 的块,所以分块算法的时间复杂度通常为 \(

  • AtCoder Beginner Contest 2102021-07-21 01:01:32

    A-Cabbages # include "iostream" # include "cstdio" using namespace std; int N,A,X,Y; int main(){ scanf("%d%d%d%d",&N,&A,&X,&Y); printf("%d",N>=A?A*X+(N-A)*Y:N*X); return 0; } B-B

  • Codeforces1536 C. Diluc and Kaeya(思维)2021-06-13 10:57:24

    题意: 解法: 首先对于前缀[1,i],计算D的数量d和K的数量k,当前d和k的数量比为d/k. 由于每个部分d/k相同,那么你拆分出一段之后,剩下数量中d/k是不变的,那么就变为了一个子问题. 我们要令子问题递归的次数尽可能多, 用map标记d/k的位置有多少个,这里d/k要化为最简分数,d/k的最

  • NOIP 模拟5 T3 big2021-06-08 12:02:05

    题面:你需要在[0,2^n)中选一个整数 x,接着把 x 依次异或 m 个整数a1~am      在你选出 x 后,你的对手需要选择恰好一个时刻(刚选完数时、异或一些数后或是最后),将 x 变为你想使 x 最后尽量大,而你的对手会使 x 最后尽量小。      你需要求出 x 最后的最大值,以及得到最大值的初值

  • [CF1137E] Train Car Selection2021-05-20 20:03:28

    传送门 解答 注意到\(b, s > 0\):在前面的“更有成为最小值的可能”。 操作1:相当于将原数列清0。(没什么用) 若没有操作2:只保留第一个数即可。 若有操作2:考虑操作3相当于加上一条直线。又因要维护最小值,联想到凸包(在这个操作后仍为凸包) 那么维护凸包就可以了~本题只需要使用栈维护即

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有