更好的阅读体验 Portal Portal1: Luogu Portal2: POJ Description One cow from each of N farms \((1 \le N \le 1000)\) conveniently numbered \(1 \cdots N\) is going to attend the big cow party to be held at farm #X \((1 \le X \le N)\). A total of \(M (1 \le M \l…
P1821 [USACO07FEB]银牛派对Silver Cow Party 题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big cow party to be held at farm #X (1 ≤ X ≤ N). A total of M (1 ≤ M ≤ 100,000) unidirectional (one-way roads co…
P1821 [USACO07FEB]银牛派对Silver Cow Party 题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big cow party to be held at farm #X (1 ≤ X ≤ N). A total of M (1 ≤ M ≤ 100,000) unidirectional (one-way roads co…
题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big cow party to be held at farm #X (1 ≤ X ≤ N). A total of M (1 ≤ M ≤ 100,000) unidirectional (one-way roads connects pairs of farms; road i requires…
题目链接:https://www.luogu.org/problemnew/show/P1821 反向多存一个图,暴力跑两遍 #include <cstdio> #include <iostream> #include <algorithm> #include <queue> #include <cstring> using namespace std; ; const int inf = 0x7fffffff; int n, m, x, dis…
[题解] 其实解法 #include<cstdio> #include<cstring> #include<algorithm> #define LL long long #define rg register #define N 200010 using namespace std; int n,m,s,ans,tot,last[N],dis[N],dis2[N],pos[N]; struct rec{ int u,v,d; }r[N<<]; struct…
题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big cow party to be held at farm #X (1 ≤ X ≤ N). A total of M (1 ≤ M ≤ 100,000) unidirectional (one-way roads connects pairs of farms; road i requires…
题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big cow party to be held at farm #X (1 ≤ X ≤ N). A total of M (1 ≤ M ≤ 100,000) unidirectional (one-way roads connects pairs of farms; road i requires…
题目简叙: 寒假到了,N头牛都要去参加一场在编号为X(1≤X≤N)的牛的农场举行的派对(1≤N≤1000),农场之间有M(1≤M≤100000)条有向路,每条路长Ti(1≤Ti≤100). 每头牛参加完派对后都必须回家,无论是去参加派对还是回家,每头牛都会选择最短路径,求这N头牛的最短路径(一个来回)中最长的一条路径长度. 分析: 其实这道题的考点就是单元最短路径和单终点最短路径. 单终点最短路径其实就可以把所有的边反过来,直接就转换为单源最短路径了. 于是此题的核心就是跑两遍dijkstra或…
银牛排队 对于我这种蒟蒻来说,还是不要跑一次单元最短路.跑两次好写呀(- ̄▽ ̄)- 而题目中是有向图.如果如果按照题意进行最短路的话.就会出现一个单终点最短路和一个单起点最短路 对于单起点自然就是套模板,但对于单终点最短路怎么办呢? 显而易见的是,只有一个终点废话呢你(/゚Д゚)/ 这样我们就可以反向存一次有向边.将终点变为起点,这样的话就可以套模板了合着就是刷模板题呀(▼⊿▼) #include<iostream> #include<cstdio> #include<que…
银牛派对 正向建图+反向建图, 两边跑dijkstra,然后将结果相加即可. 反向建图以及双向建图的做法是学习图论的必备思想. #include <iostream> #include <cstdio> #include <cstring> #include <queue> using namespace std; //Mystery_Sky // #define maxn 1000010 #define maxm 5000050 #define INF 0…
由题意可知,我们需要求的是很多个点到同一个店的最短距离,然后再求同一个点到很多个点的最短距离. 对于后者我们很好解决,就是很经典的单源最短路径,跑一边dijkstra或者SPFA即可. 然而对于前者,我们应该怎么解决呢?难道我们需要求一边Floyd?当然不可能!\(O(n^3)\)的时间复杂度,对于我们的\(n<=1000\)是果断要超时的. 深入分析,对于一张图,A到B的最短距离,应该等于B到A,在反转一张图以后的最短距离.所谓反转一张图,就是把变得方向调转.这一点是很显然的! 因此,对于问题…
题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big cow party to be held at farm #X (1 ≤ X ≤ N). A total of M (1 ≤ M ≤ 100,000) unidirectional (one-way roads connects pairs of farms; road i requires…
题目大意 有 $\text{N1}$ 本书 $\text{N2}$本练习册 $\text{N3}$本答案,一本书只能和一本练习册和一本答案配对.给你一些书和练习册,书和答案的可能的配对关系.问你最多可以配成多少套完整的书册. 解题思路 我已开始直接建立超级源点汇点,然后源点$\rightarrow $练习册连边,练习册$\rightarrow $书连边,书$\rightarrow $答案连边,答案$\rightarrow $汇点连边.然后直接跑 $\text{Dinic}$.$\text{RE}…
# 题目大意 管理大大给修下 $\text{Markdown}$ 吧,严重影响做题体验啊. 这道题的意思很简单就是给你一个长度是 $n$ 的环,这个环上不均匀的分布着 $n$ 头奶牛.一头奶牛移动要花费的代价是距离的平方,现在让你求出使得每个点上都有一头奶牛需要花费的最小代价,注意,奶牛只能顺时针移动. # 解题思路 首先断环成链这个大家应该都知道,就是将原序列 copy 一份放到后面去. 然后考虑如果一头奶牛在移动的过程中没有经过其他奶牛,那这一定是最优的方案.还有就是如果一个点有奶牛,那将奶…
更好的阅读体验 Portal Portal1: Luogu Portal2: LibreOJ Description \(S\)城现有两座监狱,一共关押着\(N\)名罪犯,编号分别为\(1 - N\).他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值"(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多.如果两名怨气值为\(c\) 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为\(…
更好的阅读体验 Portal Portal1: Luogu Description 语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行.她总是要一遍遍地给某些同学增加分数,又要注意最低分是多少.你能帮帮她吗? Input 第一行有两个整数\(n\),\(p\),代表学生数与增加分数的次数. 第二行有\(n\)个数,\(a_1 \sim a_n\),代表各个学生的初始成绩. 接下来\(p\)行,每行有三个数,\(x\),\(y\),\(z\),代表给第\(x\)个到第\(y\)个学生每人增…
更好的阅读体验 Portal Portal1: Luogu Description 广义的斐波那契数列是指形如\(an=p \times a_{n-1}+q \times a_{n-2}\)的数列.今给定数列的两系数\(p\)和\(q\),以及数列的最前两项\(a_1\)和\(a_2\),另给出两个整数\(n\)和\(m\),试求数列的第\(n\)项\(a_n\)除以\(m\)的余数. Input 输入包含一行6个整数.依次是\(p\),\(q\),\(a_1\),\(a_2\),\(n\),\…
更好的阅读体验 Portal Portal1: Luogu Description 给你一个序列\(a\) 每次两个操作: 修改\(x\)位置的值为\(y\): 查询区间\([l, r]\)是否可以重排为值域上连续的一段. Input 第一行两个数\(n, m\): 第二行\(n\)个数表示\(a[i]\): 后面m行每行三个数opt x y,或者opt l r,代表操作. Output 如果可以,输出damushen: 否则输出yuanxing. Sample Input 5 5 1 2 3…
题面 好难表述啊~ 在n*m的矩阵上,有一些大兵(为0),一些空地(一个正整数),障碍物(-1),现在摧毁一些空地,使所有大兵不能走出矩阵去(代价为表示空地的整数),求最小代价 思路: 网络流最小割 "阻止","最小",看到这样的字眼,肯定就要想到最小割啊 在互相能到达的点之间建边,容量为INF,因为--它不能炸-- 然后把每个点拆成入点和出点,每个兵所在的出点和源点S直接相连,在最外面的点的出点和汇点T直接相连 最后套模板,OK了 最重要的还是建边,能够理解题目的…
数列编辑器,在线IDE 本期的主题是洛谷的在线IDE 小学生?!小学生虐我…
题目背景 滚粗了的HansBug在收拾旧数学书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差. 输入输出格式 输入格式: 第一行包含两个正整数N.M,分别表示数列中实数的个数和操作的个数. 第二行包含N个实数,其中第i个实数表示数列的第i项. 接下来M行,每行为一条操作,格式为以下两种之一: 操作13:1 x y k ,表示将第x到第y项每项加上k,k为一实数. 操作2:2 x y ,表示求出第x到第…
# 解题思路 这题不难,但是原谅我一开始的傻逼想法,一会儿再给大家透露透露. 先说怎么做这题. 显然对于 $0$ 和 $1$ 来说,异或无非也就只有两种变化 异或了奇数次,$0$ 就会变成 $1$,$1$ 就会变成 $0$. 异或了偶数次,$0$ 和 $1$ 都不变. 那只需要在下传标记的时候下传修改了几次就可以. 好,下面说说我那傻逼的操作.我在下传标记的时候没有给子节点的 sum 进行异或,而是只下传了标记,并且在回溯的时候没有更新父节点的 sum 值. 然后我成功的没过样例,然鹅这并不傻逼…
# 解题思路 修改,就是一个区间修改的常规操作,但是为了迎合查询的需要,对两端的不完整的块需要暴力重构,重新进行排序操作,保证每一块都是单调上升的顺序. 然后再说进行查询的操作,起初,我们需要在每一个块内进行排序.保证顺序时单调上升的(在每一个块内,是独立的),然后查询的时候对每一块($k$)都二分查找到大于 $num + tag[k]$ 的第一个数的位置,然后就可以得到一共有多少大于 $num$ 的数了. 值得注意的是,有些题解写的是对原序列直接进行排序,这就有一个错误,那就是在排序之后序列的…
# 解题思路 两点之间的路径的话一定经过它们两个 LCA,这一点已经是显而易见的,那么再来看看异或的性质. $$a\ xor\ b\ xor\ b = a\\ a\ xor\ a=0\\ a\ xor\ 0 = a\\ a\ xor\ b = b\ xor\ a\\ a\ xor\ b\ xor\ c = a\ xor\ (b\ xor\ c)$$ 再回到这个题上来,因为 $a\ xor\ b\ xor\ b = a$,所以从根节点出来的一条路径我们可以预先处理一个异或和出来. 在询问的时候再将…
# 解题思路 跑 $\text{n}$ 遍 $\text{spfa}$ 并记录路径,找到比当前最长路长的就更新答案,并且将路径也更新,注意起点的处理. # 附上代码 #include <iostream> #include <cstring> #include <cstdio> #include <queue> #define INF 123456789 using namespace std; ], head[], cnt, pre[], Ans, ans…
# 题目大意 真讨厌题面写的老长老长的. 这个题的意思就是给定一棵无根树,每个节点都有一个美丽值(可能是负数),可以删掉一些边来删除某些点,现在要求你求出可以删掉任意条边的情况下,这个树上的剩余节点的美丽值之和的最大值. # 解题思路 以每一个节点为根,做 $\text{dfs}$,考虑到这样的一个性质,如果一棵子树节点的美丽值之和为负数,那就可以将这棵子树全部删掉. 所以就在 $\text{dfs}$ 的同时记录一下子树的美丽值之和.如果你这样做的话,会得到 $70$ 分的好成绩(会 $\te…
# 解题思路 这题不难,主要就是考虑如何判重,如果直接在 $9$ 个位置上都比较一遍的话.你会得到下面的好成绩 所以考虑另一种方法: 将九个位置压成一个整数,并且因为只有九个数,所以不会超出 $int$,用 $set$ 判重,写一个 BFS 就过了 # 附上代码 #include<iostream> #include<cstdio> #include<queue> #include<set> using namespace std; struct node{…
# 题目大意 给出区间 $[a,b]$,求出区间中有多少数满足下列两个条件 不含有前导 $0$. 相邻两个数字之差的绝对值至少是 $2$. # 解题思路 数位 $DP$,用记忆化搜索来实现.设 $dp[i][j]$ 表示现在已经枚举到第 $i$ 位,第 $i+1$ 位是 $j$ 时一共有多少满足条件的数. 还是直接看代码里的注释吧. # 放上代码 #include <algorithm> #include <iostream> #include <cstring> #i…
解题思路 很明显的是个期望 $dp$. 先前想到 $dp[i][j]$ 表示第决策到第 $i$ 个时间段,已经进行了 $j$ 次申请,然后就没有然后了,因为这根本就没法转移啊,你又不知道前 $i-1$ 个时间段里哪一个时间段是申请换教室了的.所以此路不通,另寻他路---题解.天哪没有题解还咋做题啊 不妨再加入一维 $[0/1]$ 表示第 $j$ 个时间段有没有进行申请操作 那么就分为一下两种情况 第 $i$ 个时间段申请了 第 $i$ 个时间段没有申请 那么这两种状态分别是 $dp[i][j][…