- 博客(21)
- 收藏
- 关注
原创 【最短路+容斥】arc090E Avoiding Collision
题目:https://vjudge.net/contest/464115#problem/G题意:一个nnn个点mmm条边的无向图,每条边有一个边权www。有一个起点sss和终点ttt,求从sss出发到ttt和从ttt出发到sss的不相遇的两条路径的路径对数。思路:dijkstradijkstradijkstra 求出起点到iii的距离dis[0][i]dis[0][i]dis[0][i],终点到iii的距离dp[1][i]dp[1][i]dp[1][i],起点到iii最短路的方案数cnt[0][i
2021-10-25 19:00:16 217
原创 2021杭电多校第三场 Road Discount
题目:https://acm.dingbacode.com/showproblem.php?pid=6981题意: 给出两个n∗nn*nn∗n的矩阵aaa和bbb,求从(1,1)(1,1)(1,1) 到(n,n)(n,n)(n,n) 经过的路径上,矩阵ai,ja_{i,j}ai,j的和与bi,jb_{i,j}bi,j的乘积最大值。数据范围1<=n<=1001<=n<=1001<=n<=100,1<=ai,j,bi,j<=1e61<=a_{i,
2021-07-27 21:21:40 265
原创 【基环树】 E.Shortest Path Sum 牛客
题目:https://ac.nowcoder.com/acm/contest/12986/E题意:给出一个nnn个点nnn条边的无向连通图,有qqq次询问,每次询问给出三个点x,y,zx,y,zx,y,z,求一个点kkk到x,y,zx,y,zx,y,z三点距离之和最小。思路:首先看到nnn个点nnn条边的无向连通图,这显然是一个基环树,每次询问三个点,那么最多只有三种情况三个点在一棵树上,那么答案就是两两之间距离之和除以222三个点分别在两颗树上,那么点kkk的位置一定在同一颗树上两点的LcaL
2021-03-23 14:42:16 221 2
原创 【AC自动机+dp】牛妹的考验
题目:https://ac.nowcoder.com/acm/contest/7009/F题意:给出nnn个单词,每个单词有一个权值valvalval,构造一个长度为L的串,求最大权值,计算权值时包含关系也要计算。即:abcabcabc的valvalval为2,ababab值为1,构造一个串abcabcabc的值为2+1=32+1=32+1=3思路:考虑有nnn个单词,多串匹配,显然是AC自动机,这道题有重复和包含的情况,我们在建trietrietrie树和求failfailfail指针的时候进行处
2021-01-23 15:30:00 363 2
原创 【悬线法】 P4147 玉蟾宫
题目:https://www.luogu.com.cn/problem/P4147题意:给出一个矩阵,由F,RF,RF,R构成,求由FFF构成的最大子矩阵题目:这道题很容易想到最大子矩阵,但这样复杂度是n3n^3n3,这道题显然不够(据说有dalao卡过去了)这道题我们考虑悬线法,悬线法就是确定一条竖线,我们确定这条竖线的上边界,即矩阵边界或R点,然后这条竖线左右移动,找到左右边界,我们就求出了这条线的最大矩阵我们预处理每个点的上边界和左右边界,一行一行枚举,求出每个点向上、向左右扩展的矩阵,取最
2021-01-20 21:28:07 177
原创 【AC自动机】P3966 [TJOI2013] 单词
题目:https://www.luogu.com.cn/problem/P3966题意:给出nnn个单词组成一篇文章,问:每个单词分别在文章中出现过几次思路:学习的时候参考了大佬的题解:https://www.luogu.com.cn/blog/scp-d14134/ti-xie-p3966-tjoi2013-dan-ci-post这道题很容易想到ac自动机,建树的过程中统计每个子串出现的个数,然后查询n次,但显然,这样就 会TLETLETLE!这个时候我们就需要用到一个failfailfail
2021-01-19 16:37:18 158
原创 【拓扑排序+dp】2019 icpc 南京 C - Digital Path
题目:https://vjudge.net/contest/413631#problem/C题意:给一个n∗mn*mn∗m的方格,每个方格给出一个范围为-1e7~1e7的值,要求找到一些数字路径,相邻格子有共同边缘步数最大,无法延申至少有四个格子从起点到终点,相邻格子的值依次增加1求所有合法路径个数思路:首先按照题意建图,点的编号是(i−1)∗m+j(i-1)*m+j(i−1)∗m+j,对于任意一个点,从四周能到达它的点连一条有向边,很明显这是一个DAG。我们直接按照拓扑序递推答案即可。
2020-12-16 21:15:58 155
原创 【字符串hash】C. Cornelia Street CF gym
题目:https://codeforces.com/gym/307723/problem/C题意:给出一个字符串S,要求找出两个子串A和B,A和B等长,S可以表示成AAAA···ABB···BAAAAA···Aa,其中a是A的前缀,a的长度大于等于0并且小于A的长度。...
2020-12-13 21:12:37 377
原创 【字符串hash+滑动窗口】String HDU - 4821
题目:https://vjudge.net/contest/412612#problem/A题意:给出一个字符串s,和两个值L,M,要求找出s的子串满足长度为L*M将字串分成M个长度为L的串,要求这M的串不相同问有多少子串满足条件。思路:求出原串的哈希值,枚举起点,求出前M段,然后利用滑动窗口,每次向右滑动L。因为每次可以滑动求出,因此起点枚举1到L即可。代码:#include<bits/stdc++.h>#define INF 0x3f3f3f3f#define lowb
2020-12-13 19:32:02 131
原创 【最小费用最大流(改进Dijkstra)】2016 icpc 青岛 G - Coding Contest
题目:https://vjudge.net/contest/412116#problem/G题意:t组样例,n个点,每个点有sis_isi个人和bib_ibi份物资。m条边,每条边从第二次开始,每被经过一次,断掉的概率为pip_ipi,并且被经过的上限为cic_ici,超过cic_ici则一定会断掉。现在每个人都要获得一份物资,问 路会断掉的最小可能性是多少。思路:路会断掉的可能性为P=1−∏i=1n(1−pi)kP=1-\prod_{i=1}^{n}(1-p_i)^kP=1−∏i=1n
2020-12-10 22:17:36 249
原创 【爆搜+剪枝】2016 icpc 沈阳 E - Counting Cliques
题目:https://vjudge.net/contest/412473#problem/E题意:给你一个n个点,m条边的无向图,询问有多少个点集大小为s的完全图。思路:这题没有什么算法,爆搜+剪枝,主要问题是如何剪枝。 因为无向图在搜索过程中会产生很多重复,所以我们将这个图转化为有向图,将一条无向边变成一条由下标小的点指向下标大的点的有向边,然后记录每个点的的度。剪枝:每个结点出度大于等于s-1当前结点的入度等于递归深度当前结点的度大于等于s-1代码#include<bits/s
2020-12-09 21:49:04 176
原创 【树形dp】K - Integers on a Tree AtCoder - arc063_c
题目:https://vjudge.net/contest/411616#problem/K题意:给出一个n个点,n-1条边的树,给定k个点的点权,判断是否有一种方法,将剩下n-k点填上点权,使得任意相邻的两个点点权之差为1,如果存在啧输出任意一种方案。思路:首先,差1可以得出相邻两点的奇偶性不同,因此我们只要根据这个条件判断合法性,并求出每个点的合法区间,就可以任意构造一组解。构造合法区间可以考虑树形dp求解,对于每个点来说,它的合法区间就是本身和所有儿子结点的交集,求出所有合法区间,就可以任意
2020-12-08 20:17:52 135
原创 【枚举+树形dp】2017icpc 沈阳 L - Tree
题意:给出一颗有n个结点的无根树,有k种颜色,要给每个点染一种颜色,对于每种颜色的点所形成的连通块,构成的遍集,求最大交集思路:我们直接考虑每一条边的贡献,对于每一条边,如果他的两端,都有大于等于k个点,那么一定有一种染色方式存在使得这条边在k个集合中存在。所以问题转化成,枚举每一条边,判断他的两端是否各有大于等于k个点,这个问题就是树形dp裸题,跑两边dfs即可。代码#include<bits/stdc++.h>#define INF 0x3f3f3f3f#define lowbit
2020-12-07 16:36:49 147
原创 【贪心】K-th K AtCoder - agc008_d
题意:给出一个长度为n的序列x,要求构造一个序列aa的长度为n2,元素包括1,2,…,n,每种出现n次对于元素i,1≤i≤ni,1\le i\le ni,1≤i≤n,第iii次出现在中的位置为xi思路:首先在xi位置上填上i,然后我们将<xi,i>,按照xi从小到大排序,然后对每个,在xi从前往后填充i-1个i,填充过程中判断是否合法。同样的方法再倒着填n-i个数就可以了。代码#include<bits/stdc++.h>#define INF 0x3f3f3f3f
2020-12-07 15:36:40 142
原创 【并查集+哈希】Connectivity AtCoder-arc065_b
题目:https://vjudge.net/contest/411836#problem/J题意:有n个城市,k条公路,l条铁路,求出每个城市既被公路联通,又被铁路联通的城市个数。定义每个城市连通自己。思路:对公路和铁路分别进行并查集,然后我们其实要求公路和铁路两个集合的交集,但是并查集合并求的话,复杂度n2lognn^2lognn2logn显然是不够的。我们可以用map哈希合并统计两个集合中出现的根的数量。代码#include<bits/stdc++.h>#define INF 0x
2020-12-06 19:39:37 260
原创 【暴力枚举】AtCoder - arc073_b Simple Knapsack
题目链接:https://vjudge.net/contest/410631#problem/J题意:给出n个物品和一个容量为W的包,随后n行给出每个物品的重量wi和价值vi,挑出价值小于等于W并且价值最大的物品,输出最大价值。数据范围:n<=100,w<=1e9,v<=1e7,w1<=wi<=w1+3思路:n的范围只有100,w的值只有四种,w1,w1+1,w1+2,w1+3,所以n3n^3n3枚举就可以,只要枚举w1,(w1+1),(w1+2)的个数,算出(w1+3)
2020-12-01 17:31:36 204
原创 【思维】2018icpc沈阳 C - Insertion Sort
题意:给你n,k,q,表示有一个长度为n的排列,前k个有序,模q。问有多少种排列,前k个排序后,最长上升子序列大于等于n−1n-1n−1。思路:排序之后整个有序:k!k!k!排序后前k个是1~k,后面LIS为n-k-1:k!∗(n−k)∗(n−k−1)−(n−k)=(n−k−1)2k!*(n-k)*(n-k-1)-(n-k)=(n-k-1)^2k!∗(n−k)∗(n−k−1)−(n−k)=(n−k−1)2排序后前k个数有一个被换成k+1,被换的数任意插到后面n−kn-kn−k的位置:k!∗k∗(n
2020-11-29 21:30:56 343
原创 【素数+大数】2018icpc焦作 E - Resistors in Parallel
题意:n个电阻,电阻Ri的阻值ri={∞if i是平方数ir_i = \begin{cases}\infty &\text{if } i是平方数 \\i\end{cases}ri={∞iif i是平方数定义第i种电阻集合Si={j∣i%j==0}S_i=\{j\mid i\%j ==0\}Si={j∣i%j==0},给定n,找出一个集合SiS_iSi使得SiS_iSi内电阻并联后阻值最小,输出最简分式。思路:因为x%d2=0x\%d^2=0x%d2=0时电阻为0,所
2020-11-28 21:58:34 174 1
原创 【二分图/最大流】2018icpc南京 Problem I. Magic Potion
题意:给出n个人,m个怪兽,k瓶药水。接下来n行代表第i个人可以杀的怪兽编号,行首ti表示第i个人可以杀的怪兽个数,随后ti个数表示怪兽编号。每个人只能杀死一头怪兽,同时有k瓶药水,药水可以让一个人多杀一头怪兽,但是一个人最多只能使用一瓶药水。问最多能杀死多少怪兽。思路:匈牙利:这道题很容易想到二分图最大匹配,但是有k瓶药水的条件,所以我们只要跑两遍匈牙利,第一遍跑最大匹配,第二遍跑出来答案和k取最小值就可以了最大流:最大流,主要就是怎么建图,建立源点S,汇点T,从S向n个人连出n条流量为1的边,
2020-11-28 19:31:46 198
原创 【贪心】2018年icpc徐州站 H - Rikka with A Long Colour Palette
题意:有n个区域,k种颜色,每个区域任选一种颜色,问最多共有多长的区域能被k种颜色覆盖,并输出一种方案思路:贪心的考虑,我们要让尽量多的重叠区间个数>=k的区间有k种颜色。想法很容易想到,主要去考虑如何算答案和方案。将2*n个点排序,位置相同时右端点排在左端点之前。 将未使用过的颜色放在队列中 如果当前队列为空,那么说明该点到上一个点之间被覆盖过k次如果当前点是左端点如果还有颜色没有分配,那么给这个区间分配颜色;如果没有颜色了,就将这个区间放到栈里待定(注意这里是不能随便给这个区间分
2020-11-27 19:17:10 226
原创 【打表找规律】2018icpc南京G - Pyramid
题意:给出n行三角形,求出其中等边三角形的个数,图中给出的两种都是合法情况。数据范围:n<=1e9思路:打表找规律,将所有点的坐标放在坐标系里,n^3搜索打表打表得出 1 5 15 70 126 270 …规律为ans=(n+1)(n+2)(n+2)/24打表代码#include<bits/stdc++.h>#define INF 0x3f3f3f3f#define lowbit(x) x&(-x)#define pb push_backusing na
2020-11-27 15:32:40 178
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人