今天做到一道最短路的题,原题https://loj.ac/problem/10081 题目大意为给一张有n个顶点的图,点与点之间有m1条道路,m2条航线,道路是双向的,且权值非负,而航线是单向的,权值可能为负,保证两点之间如果有航线就不会有道路.现给定起始点s,求s到每个点的最短路径,如果没有则输出“NO PATH”. 我当时看到这题那叫一个高兴啊,以为又是一道水题,因为有负权边,不能用Dijkstra,选择用SPFA.那么有没有负环呢?经过实测数据并没有负环,本以为可以轻松AC了,然而评测结果…
LOJ#10064. 「一本通 3.1 例 1」黑暗城堡 题目描述 你知道黑暗城堡有$N$个房间,$M$条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设$D_i$为如果所有的通道都被修建,第$i$号房间与第$1$号房间的最短路径长度: 而$S_i$为实际修建的树形城堡中第$i$号房间与第$1$号房间的路径长度: 要求对于所有整数$i(1\le i\le N)$,有$S_i= D_i$成立. 你想知道有多少种不同的城堡修建方案.当然,你只需要输出答案对$2^{31}…
LOJ#10117. 「一本通 4.1 练习 2」简单题 题目描述 题目来源:$CQOI 2006$ 有一个$n$个元素的数组,每个元素初始均为$0$.有$m$条指令,要么让其中一段连续序列数字反转——$0$变$1$,$1$变$0$(操作$1$),要么询问某个元素的值(操作$2$). 例如当$n=20$时,$10$条指令如下: 操作 回答 操作后的数组 $1\ 1\ 10$ N/A $11111111110000000000$ $2\ 6$ $1$ $11111\underline{1}1111…
LOJ #10131 「一本通 4.4 例 2」暗的连锁 给一棵 \(n\) 个点的树加上 \(m\) 条非树边 , 现在需要断开一条树边和一条非树边使得图不连通 , 求方案数 . $n \le 10^5 , m \le 2*10^5 $ , 保证答案在 \(int\) 范围内. 对于每条非树边 , 覆盖 \(x\) 到 \(LCA\) 和 \(y\)到 \(LCA\) 的边 , 即差分算出每个点和父亲的连边被覆盖了多少次 . 被覆盖 \(0\) 次的边可以和 \(m\) 条非树边搭配 , 被覆…
SPFA可能会被卡掉,能用dijkstra就别用SPFA,代码较长,但我已尽力做到解释,请耐心看下去,存储为邻接表存储. #include<bits/stdc++.h> #define inf 0x3f3f3f3f//(宏定义一个很大的值,例如0x3f3f3f3f等) using namespace std; int n,m,cnt;//cnt 计数器(有cnt条边) struct edge//结构体定义 { int v,w,nxt;//v 目标点 w 边权 nxt 这条边的上一条边(遍历)…
题意描述: 见原LOJ:https://loj.ac/problem/10084 题解: 假设所求的平均最小值为X,环上各个边的权值分别为A1,A2...Ak,可以得到: X=(A1+A2+A3+...+Ak)/K, A1+A2+A3+...+Ak=X*K, 移项可得:(A1-X)+(A2-X)+(A3-X)+...+(Ak-X)=0, 另外注意到式子中的等于号可以改为大于等于,那么我们可以二分结果ans,然后判断是否存在一组解满足(A1+A2+A3+...+Ak)/k<=ans, 即判断:(A…
题目地址 LOJ 题解 神仙思路.思路参考自<算法竞赛进阶指南>. 考虑维护dfs序中相邻两个石头的距离,那么每次?的答案就是sum/2(首尾算相邻) 然后维护一下拿个平衡树/set维护一下前驱后缀分类讨论一下就行了. 具体的话就是 1.插入x 对ans减去\(dis(pre,nxt)\),再加上\(dis(pre,x)+dis(x,nxt)\),然后插入\(x\) 2.删除x 先删去\(x\),对ans减去\(dis(pre,x)+dis(x,nxt)\),再加上\(dis(pre,nxt)…
题目链接:https://loj.ac/problem/10065 题目描述 原题来自:Waterloo University 2002 北极的某区域共有 nnn 座村庄,每座村庄的坐标用一对整数 (x,yx, yx,y) 表示.为了加强联系,决定在村庄之间建立通讯网络.通讯工具可以是无线电收发机,也可以是卫星设备.所有的村庄都可以拥有一部无线电收发机, 且所有的无线电收发机型号相同.但卫星设备数量有限,只能给一部分村庄配备卫星设备. 不同型号的无线电收发机有一个不同的参数 ddd,两座村庄之间…
题目链接:https://loj.ac/problem/10172 题目描述 Tyvj 两周年庆典要到了,Sam 想为 Tyvj 做一个大蛋糕.蛋糕俯视图是一个 N×MN×MN×M 的矩形,它被划分成 N×MN×MN×M 个边长为 1×11×11×1 的小正方形区域(可以把蛋糕当成 NNN 行 MMM 列的矩阵).蛋糕很快做好了,但光秃秃的蛋糕肯定不好看!所以,Sam 要在蛋糕的上表面涂抹果酱.果酱有三种,分别是红果酱.绿果酱.蓝果酱,三种果酱的编号分别为 1,2,31,2,31,2,3.为了保…
题目链接:https://loj.ac/problem/10115 题目描述 原题来自:Vijos P1448 校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两种操作: K=1,读入l,r 表示在l  到 r 之间种上一种树,每次操作种的树的种类都不同: K=2,读入 l,r 表示询问 l 到 r 之间有多少种树. 注意:每个位置都可以重复种树. 输入格式 第一行  表示道路总长为 n,共有  m个操作:接下来 m 行为 m 个操作. 输出格式…
题目链接 题目大意 $$F[i]=F[i-1]+F[i-2]\ (\ F[1]=1\ ,\ F[2]=1\ )$$ $$T[i]=F[1]+2F[2]+3F[3]+...+nF[n]$$ 求$T[n]\ mod\ m$ $n,m<=2^{31}-1$ 这题的递推式推导有点神仙,完全想不到多用两个数组来形成递推式.研究了一下一本通上面的两个辅助数组的用途然后才会推出来这个转移矩阵 还是太菜了 题解 由题目可得  $$F[i]=F[i-1]+F[i-2]\ (\ F[1]=1\ ,\ F[2]=1\…
题目链接:https://loj.ac/problem/10106 题目描述 来自 ICPC CERC 1999/2000,有改动. 有 NNN 个盘子,每个盘子上写着一个仅由小写字母组成的英文单词.你需要给这些盘子安排一个合适的顺序,使得相邻两个盘子中,前一个盘子上单词的末字母等于后一个盘子上单词的首字母.请你编写一个程序,判断是否能达到这一要求.如果能,请给出一个合适的顺序. 输入格式 多组数据.第一行给出数据组数 TTT,每组数据第一行给出盘子数量 NNN,接下去 NNN 行给出小写字母字…
树链剖分模板题,详见这篇博客.…
题面 题目描述 给定一个正整数数列 $a_1, a_2, a_3, \dots , a_n$,每一个数都在 0~p-1之间.可以对这列数进行两种操作: 添加操作:向序列后添加一个数,序列长度变成 n+1: 询问操作:询问这个序列中最后 L 个数中最大的数是多少. 程序运行的最开始,整数序列为空.写一个程序,读入操作的序列,并输出询问操作的答案. 输入格式 第一行有两个正整数 m,p,意义如题目描述: 接下来 m 行,每一行表示一个操作.如果该行的内容是 Q L,则表示这个操作是询问序列中最后 L…
题面 传送门 Ural 州立大学的校长正在筹备学校的 8080 周年纪念聚会.由于学校的职员有不同的职务级别,可以构成一棵以校长为根的人事关系树.每个资源都有一个唯一的整数编号,从 $1$ 到 $N$ 编号,且对应一个参加聚会所获得的欢乐度.为使每个职员都感到快乐,校长设法使每个职员和其直接上司不会同时参加聚会. 你的任务是设计一份参加聚会者的名单,使总欢乐度最高. 第一行是一个整数 $N$ : 接下来 $N$ 行对应 $N$ 个职员的欢乐度,第 ii 行的一个整数为第 $i$ 个职员的欢乐度…
前言 从现在开始,这个博客要写一些题解了.起初,开这个博客只是好玩一样,没事就写写CSS.JS,然后把博客前端搞成了现在这个样子.以前博客只是偶尔记录一些东西,刷题也从来不记录,最近受一些学长的影响,突然觉得写解题报告也很有意思,以后基本上做的题,除了太水的,都会在这上面更新. 一直很想买一个域名,然后用博客框架搭一个自己的博客,以前用 WordPress 和 Hexo 都搭过博客,但是域名续费.虚拟主机(虽然可以用 Hexo+GithubPage/CodingPage 搭静态博客,但更新不方便…
题面 解题思路 贪心,首先按右端点排序,然后从小往大扫,因为要求树最少,所以要尽量放在右端点.然后开个bool数组判断是否种过树即可. 代码 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int MAXN = 3e4+5; inline int rd(){ int x=0,f=1;char ch=getc…
题目传送门 如果之前推过斐波那契数列前缀和就更好做(所以题目中给出了). 斐波那契数列前缀和题目链接 先来推一下斐波那契数列前缀和: \[\sum\limits_{i=1}^nf(i) \] 其中 \(f(i)\) 表示Fibonacci数列第 \(i\) 项. 直接推式子: 记 \(s(x)=\sum\limits_{i=1}^xf(i)\) 将右边一项项展开得出 \[f(1)=1 \] \[f(2)=1 \] \[f(3)=f(1)+f(2) \] \[f(4)=f(2)+f(3) \] \…
[LOJ 6031] 「雅礼集训 2017 Day1」字符串 题意 给定一个长度为 \(n\) 的字符串 \(s\), \(m\) 对 \((l_i,r_i)\), 回答 \(q\) 个询问. 每个询问会给定一个长度为 \(k\) 的字符串 \(w\) 以及一对 \(L,R\), 求所有满足 \(i\in [L,R]\) 的 \(w[l_i:r_i]\) 在 \(s\) 中的出现次数之和. \(n,m,k,q\le 1\times 10^5\), \(\sum |w|\le 1\times 10…
[LOJ 6030] 「雅礼集训 2017 Day1」矩阵 题意 给定一个 \(n\times n\) 的 01 矩阵, 每次操作可以将一行转置后赋值给某一列, 问最少几次操作能让矩阵全为 1. 无解输出 -1. \(n \le 1000\). 题解 首先手玩下样例就可以发现一个非常虾皮的明显性质: 因为操作是赋值而不是取或, 于是一定是先让某一行都为 1 然后用这一行去染所有不是全 1 的列. 对于构造一个全 1 的行, 如果行号为 \(k\), 那么显然是用某一行的第 \(k\) 列上的 1…
[LOJ 6029] 「雅礼集训 2017 Day1」市场 题意 给定一个长度为 \(n\) 的数列(从 \(0\) 开始标号), 要求执行 \(q\) 次操作, 每次操作为如下四种操作之一: 1 l r c 给 \([l,r]\) 区间内的值全部加上 \(c\). 2 l r d 给 \([l,r]\) 区间内的值全部除以 \(d\), 向下取整. 3 l r 求 \([l,r]\) 区间内的最小值. 4 l r 求 \([l,r]\) 区间内的值之和. \(n,q\le 1\times 10…
题目描述 原题来自:CODECHEF September Challenge 2015 REBXOR 1​​≤r​1​​<l​2​​≤r​2​​≤N,x⨁yx\bigoplus yx⨁y 表示 xxx 和 yyy 的按位异或. 输入格式 输出格式 输出一行包含给定表达式可能的最大值. 样例 数据范围与提示 5​​,0≤A​i​​≤10​9​​. 题解 首先记录异或前缀和$s[i]=a[1]⊕a[2]⊕a[3] ...⊕a[i]$. 设$l[i]$为以$i$结尾的区间中,异或值的最大值. 因为异或…
#10056. 「一本通 2.3 练习 5」The XOR-longest Path 题目描述 原题来自:POJ 3764 给定一棵 nnn 个点的带权树,求树上最长的异或和路径. 输入格式 第一行一个整数 nnn,接下来 n−1n-1n−1 行每行三个整数 u,v,wu,v,wu,v,w,表示 u,vu,vu,v 之间有一条长度为 www 的边. 输出格式 输出一行一个整数,表示答案. 样例 样例输入 4 1 2 3 2 3 4 2 4 6 样例输出 7 样例解释 最长的异或和路径是 1→2→…
Loj #6503. 「雅礼集训 2018 Day4」Magic 题目描述 前进!前进!不择手段地前进!--托马斯 · 维德 魔法纪元元年. 1453 年 5 月 3 日 16 时,高维碎片接触地球. 1453 年 5 月 28 日 21 时,碎片完全离开地球. 1453 年,君士坦丁堡被围城,迪奥娜拉接触到四维泡沫空间,成为魔法师,最终因高维碎片消失失去魔力而身死. 为了改写这段历史,你不惜耗费你珍藏已久的魔术卡来回到魔法纪元元年. 在使用这些魔术卡之前,你却对它们的排列起了兴趣... 桌面上…
Loj #2479. 「九省联考 2018」制胡窜 题目描述 对于一个字符串 \(S\),我们定义 \(|S|\) 表示 \(S\) 的长度. 接着,我们定义 \(S_i\) 表示 \(S\) 中第 \(i\) 个字符,\(S_{L,R}\) 表示由 \(S\) 中从左往右数,第 \(L\) 个字符到第 \(R\) 个字符依次连接形成的字符串.特别的,如果 \(L > R\) ,或者 \(L < [1, |S|]\), 或者 \(R < [1, |S|]\) 我们可以认为 \(S_{L,…
题目描述 不同的雪花往往有不同的形状.在北方的同学想将雪花收集起来,作为礼物送给在南方的同学们.一共有 n 个时刻,给出每个时刻下落雪花的形状,用不同的整数表示不同的形状.在收集的过程中,同学们不希望有重复的雪花.你可以从任意 a 时刻开始,在 b 时刻停止.a 到 b 时刻中间的雪花也都将被收集.他们希望收集的雪花最多. 输入格式 第一行一个正整数 n: 第 2 行 n 个非负整数表示 n个时刻雪花的形状. 输出格式 最多能收集雪花的数量. 样例 输入样例 5 1 2 3 2 1 输出样例 3…
题目描述 原题来自:HDU 2087 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? 输入格式 输入数据为多组数据,读取到 # 字符时结束.每组数据仅有一行,为由空格分开的花布条和小饰条.花布条和小饰条都是用可见 ASCII 字符表示的,不会超过 1000个字符. 注意:这个 # 应为单个字符.若某字符串开头有 #,不意味着读入结束! 输出格式 对于每组数据,输出一行一个整数,表示能从花纹布中剪出的最…
题目描述 一个点每过一个单位时间就会向 444 个方向扩散一个距离,如图所示:两个点 a .b 连通,记作 e(a,b),当且仅当 a .b的扩散区域有公共部分.连通块的定义是块内的任意两个点 u.v都必定存在路径 e(u,a0),e(a0,a1),…e(ak,v). 给定平面上的 n 个点,问最早什么时候它们形成一个连通块. 输入格式 第一行一个数 nnn ,以下 nnn 行,每行一个点坐标. 输出格式 输出仅一个数,表示最早的时刻所有点形成连通块. 样例 样例输入 2 0 0 5 5 样例输…
题目:#10042. 「一本通 2.1 练习 8」收集雪花 看到网上没有这道题的题解,所以写一下. 要标记数字是否存在,看到x<=1e9,所以考虑用离散化,然后开一个last数组,last[i]表示数字i上次出现的位置,via数组记录数离散化过的数i是否出现过. 用双指针法,固定一端l,r++,如果r位置上的数字没有出现过,当前答案就++,如果出现过,就更新当前答案,维护一下via数组和左指针.记得即时更新答案最大值. 最后输出最大值. (我到底在讲什么 贴一下代码: #include<ios…
「一本通 1.3 例 5」weight 题面 给定原数列 \(a_1,a_2,a_n\) ,给定每个数的前缀和以及后缀和,并且打乱顺序. 给出一个集合 \(S\) 要求从集合 \(S\) 中找到合适的数,满足给定的所有数例前缀和和后缀和,答案保证最小的 思路 很多人上来没有思路,不知从何搜起 简单讲就是找到正确的搜索顺序,往里面放数就好了 他不是有前缀和也有后缀和嘛~,而且还是混着的, 那么你就直接排序,然后安排两个指针 \(L\) 和 \(R\) 的表示左边和右边, 记录每个 \(L\) 的前…