VIS
  • 2024-11-20洛谷 P1613 跑路 做题记录
    前置芝士:最短路、floyd传递闭包、倍增思路看到题目里面的一次能走\(2^k\)千米,我们联想到倍增,因为只能用跑路器。我们枚举\(k\),然后做一次传递闭包,\((i,j)\)走\(2^k\)千米是相连的,当且仅当有一个点\(k\)是的\((i,k),(k,j)\)可以通过走\(2^{k-1}\)千米相连。此时,\((
  • 2024-11-193243.新增道路查询的最短距离
    给你一个整数 n 和一个二维整数数组 queries。有 n 个城市,编号从 0 到 n-1。初始时,每个城市 i 都有一条单向道路通往城市 i+1( 0<=i<n-1)。queries[i]=[ui,vi] 表示新建一条从城市 ui 到城市 vi 的单向道路。每次查询后,你需要找到从城市 0 到
  • 2024-11-18NFLS 图论题单笔记(完结)
    John的农场是一张N*N的方格图,贝茜住在左上角(1,1),John住在右下角(N,N)。现在贝茜要去拜访John,每次都只能往四周与之相邻的方格走,并且每走一步消耗时间T。同时贝茜每走三步就要停下来在当前方格吃草,在每个方格吃草的用时是固定的,为H[i][j]。John想知道贝茜最少要多久才能到达Joh
  • 2024-11-18CF715B Complete The Graph 题解
    Description给\(n\)点\(m\)边的无向图,\(L\),\(s\),\(t\)。修改\(m\)条边中边为\(0\)的边,使满足\(s,t\)的最短路长度是\(L\),且输出答案的时候边为\(0\)的边的权值必须在\([1,10^{18}]\)内。Solution考虑怎么判有无解。容易发现将所有未知边边权设为\(10^{18}\),
  • 2024-11-18洛谷 P3226 [HNOI2012] 集合选数 做题记录
    我们先建一个矩阵:\(\begin{bmatrix}1&2&4&8&16&32\\3&6&12&24&48&96\\9&18&36&72&144&288\\27&54&108&216&432&864\end{bmatrix}\)
  • 2024-11-17GESP4级考试语法知识(贪心算法(六))
    寻找平面上的极大点代码#include<iostream>#include<algorithm>usingnamespacestd;structnode{ intx,y;}a[101];boolvis[101];boolcmp(nodeA,nodeB){ if(A.x!=B.x)returnA.x<B.x; returnA.y<B.y;}intmain(){ intn; cin>>n; for(i
  • 2024-11-16P8119 「Wdoi-1.5」幻想乡游览计划
    不妨考虑树的情况,对于图只要取一棵生成树即可。\(k\le4n\)是容易的,两个点分别dfs就是\(\le4n\)次。对于\(k\le3n\),考虑一个做法:一个人去遍历整棵树,每次拓展新点时交换。不难证明正确性,次数\(\le3n\)。考虑优化这个策略。注意到其中一个点一直在根,这非常浪费。事实上
  • 2024-11-16倒序处理、并查集
    倒序处理[USACO22JAN]FarmUpdatesG题目描述FarmerJohn经营着总共NNN个农场(1≤
  • 2024-11-13费用流
    暴力intvis[N],lst[N];lldis[N],flow[N];intSPFA(){ rep(i,1,n)dis[i]=INF; queue<int>q; q.push(s),dis[s]=0,flow[s]=INF; while(!q.empty()){ intu=q.front(); q.pop(),vis[u]=0; for(inti=h[u];i;i=e[i].n){ int
  • 2024-11-12题解:[XIX Open Cup, Grand Prix of Korea] Dev, Please Add This!
    前置知识:2-SAT题意[XIXOpenCup,GrandPrixofKorea]Dev,PleaseAddThis!在一张网格上有以下几种物品:空地(.)墙(#)星星(*)一个球(O)现在你要玩一个游戏。你可以让球朝上下左右某一个方向移动,但是一旦移动就必须走到底,也就是说直到前面是墙或者边界才能停。另外,如果你走
  • 2024-11-09[NOIP2018 提高组] 旅行
    算法对于一棵树的情况,dfs+贪心选取显然是正确的对于基环树的情况我们观察到城市不能重复行走所以长为\(L\)的环最多只会被访问\(L-1\)条边枚举断边,再跑dfs+贪心即可代码#include<bits/stdc++.h>constintMAXN=5e3+20;intn,m;std::vector<int>e
  • 2024-11-08P11253 [GDKOI2023 普及组] 小学生数学题 题解
    题目传送门前置知识积性函数|乘法逆元解法观察到\(f(i)=\frac{1}{i^{k}}\bmodp\)是完全积性函数,线性筛预处理即可。需要适当的取模优化。代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#defineullunsignedlonglong#definesortstab
  • 2024-11-06LOJ6119 「2017 山东二轮集训 Day7」国王
    题意给定一颗树,每个点有权值\(1\)和\(-1\),称一条路径是好的当且仅当路径上所有点的权值和为\(0\)。求连续编号区间\([l,r]\)使得两个点都在\([l,r]\)的好路径比两个点都不在\([l,r]\)的好路径数严格多的方案数。\(n\le10^5\)。Sol两个端点都在区间内不好做,
  • 2024-11-06[ARC084F] XorShift
    模拟赛题。考虑操作的构成,先忽略\(1\)操作,只考虑任意两个数的异或,不难发现所有能构成的数即为线性基。再考虑\(1\)操作,显然可以对开始的每个数率先进行\(1\)操作再构建线性基。记\(lim=\max(\log_2a,\log_2m)\),发现所有可能有效的数都不超过\(2^{2lim}\)。再考
  • 2024-11-05一种点分治树的写法
    大意就是用vector直接记录无需显式建出叶向树,只需记录fa。dis每个中只用记录dep个值,常数比map等小。但是从上向下不太好做,加点删点是比较好做的。voidgetsz(intu,intlst=0){mxsz[u]=0;sz[u]=1;for(intv:G[u])if(!vis[v]&&v!=lst){
  • 2024-11-0420241102
    T1路径注意到颜色出现的顺序并不重要,于是考虑状压,设\(f_{x,S}\)表示从\(x\)开始,经过的颜色集合为\(S\)的方案数。外层枚举路径上经过了几条路径,然后枚举点转移即可。代码#include<iostream>#defineintlonglongusingnamespacestd;intn,m,K;intclr[3000
  • 2024-11-04点分治
    点分治是个好东西。P3806【模板】点分治1给定一棵有\(n\)个点的树,询问树上距离为\(k\)的点对是否存在。首先把询问离线。在之后的过程里一起统计答案。树上距离\(k\)的点对,可以完全对应一条长度为\(k\)的路径。点分治就是处理这样一轮有关树上路径的问题。不妨随
  • 2024-11-03【笔记/模板】Bellman-Ford
    Bellman-Ford求最短路和负环时间复杂度:\(O(nm)\)【模板/笔记】Johnson算法boolBellman_Ford(){memset(dist,0x3f,sizeofdist);for(intk=1;k<n;k++)for(intver=1;ver<=n;ver++)for(inti=h[ver];~i;i=ne[i])
  • 2024-11-03【模板】素数筛
    模板原题1.寻找因数筛法时间复杂度:\(O(n\sqrtn)\)核心模板代码如下:boolisprime(intn){ if(n<2)returnfalse; //0和1都不是 for(inti=2;i*i<=n;++i) if(n%i==0)returnfalse; //有1和它本身以外的其他因子就不是素数了 returntrue;}2.埃
  • 2024-11-03AtCoder Beginner Contest 378 F题题解
    题目:F-AddOneEdge2思路:可以发现题目就是要我们找出有多少个点对满足连成后是一个简单环环上的点度都为3因为是一个简单图所以不可以有重边和自环那么就代表着这个环肯定是由两个度为2的点和大于1个度为3的点组成的注意到两个点的最近公共祖先一定可以跟这两个点形
  • 2024-11-01P11228 [CSP-J 2024] 地图探险 题解
    模拟第一眼,可能有人回想起dfs.但因为起点终点,并且走的步数都告诉你了,所以直接模拟就行.注意起始点也算被走过,所以可以用一个标记数组,判断当前格子有没有被走过.代码#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>usingnamespacestd;int
  • 2024-10-31最近做题小结
    https://www.luogu.com.cn/problem/AT_abc376_d问是否含有节点1的环我一开始做成dfs找环了很明显时间过不去肯定超时的点击查看代码#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=1e6;intnums=1e15;intvis[N],pre[N];vecto
  • 2024-10-31最短路
    Floyd算法BFS求01最短路题目链接对于边权只有0和1的图,可以用BFS+deque求最短路具体做法:前端队列存由0边更新的点,后端存由1更新的点,每次松弛从前端取比较好想,由于是BFS,可以认为本层转移下,0边转移的点dis都相等,1边转移的点dis都相等(不一定正确),那么从前面取出来的点通过0边松弛