随笔分类 - 并查集
摘要:B(贪心、fft) 将两数列排序后按照正负分离,最大值与最小值类似 考虑求最大值,对于两数列中同号的部分,显然按照绝对值顺序依次相乘;对于异号部分,需要令绝对值乘积尽可能小,简单列式子后可以得到该部分贡献为倒序卷积,按照不同情况翻转其中一个数列 最小值同理,只需先将其中一个数列翻转,后续步骤类似。
阅读全文
摘要:A(暴力) 暴力枚举所有可能的等式,按照要求check #include<bits/stdc++.h> #define rep(i,s,t) for(int i=(s),i##end=(t);i<=i##end;i++) #define dwn(i,s,t) for(int i=(s),i##end
阅读全文
摘要:hdu1 04 Ball(bitset) 把所有边升序排序后,枚举中间大小的边$e$ 考虑对每个点$i$记录所有$dis(i,j)\le e$的$j$构成的集合$S_i$ 在枚举到边$(u,v,w)$时,以该边为中位数的三角形答案为$S_i \cap \bar{S_j}$ 利用bitset容易维护
阅读全文
摘要:F $dp$出前$i$个位置匹配了多少个$nunhehheh$,再统计每个位置后面$a$的个数即可计算答案 #include<bits/stdc++.h> #define inf 2139062143 #define ll long long #define db double #define ld
阅读全文
摘要:A 数位$dp$ 咕了 B 由于$m$很小,考虑用生成函数表示方案数,设$f_i$表示$i$个物品的生成函数 转移$f_i$时,单独考虑第$i$个物品有三种情况$(不选,s,b)\(,对应价格为\)(0,1,2)$,贡献为$f_{i-1}(1+x+x^2)$ 否则$i$与$i-1$联合考虑,一共四种
阅读全文
摘要:题目大意: $n$个装备,每个装备有两个值,可以攻击该值对应的怪兽。每个装备最多用一次 每个怪兽被打一次之后就会死,每个怪兽可以被打当且仅当前面的都死了,求最多打多少个 思路: 很明显的二分图匹配,如果用$Dinic$的时候一条一条加入连向终点的边即可 但是为什么这道题我$TLE$了啊 垃圾Dini
阅读全文
摘要:题目大意: n个集合 m个操作 操作有三种(强制在线): 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 思路: 因为每次只会改一个点的$fa$,可以使用主席树暴力维护,$find$的时候不路径压缩 暴力
阅读全文
摘要:写的分基本全挂了非常的菜 T1 password 题目大意: $m$个模式串 求长度为$n$的串中包含所有$m$个串的方案数 $m\le4,len\le50$ $len=字符串总长度$ 思路: 可以想到一个$n\times len \times 2^m$的dp 然后将状压部分转换成容斥 使用矩阵加速
阅读全文
摘要:题目大意: 一个n个节点的图 T时间内一些边会出现后消失 求出每一时间段内这个图是否是二分图 思路: 对于每条边 在线段树中修改这个边所影响的区间 使用带撤销按秩合并并查集 用一个数组来维护每个点到根路径长度的奇偶性(这个数组非常的nb 线段树分治即相当于pushdown了一堆影响 对于每个点查询即
阅读全文
摘要:T1 树上路径最小值 题目大意: 带点权的树 q次询问求每两个点之间路径上最小的点权 思路: 倍增lca裸题 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstdlib> 5 #include<cstrin
阅读全文
摘要:题目大意: N 个村庄,由 M 条道路连接 其中一些道路是鹅卵石路,而其它道路是水泥路 求一个方案使保留尽可能少的道路,但是两个不同的村庄之间都应该由一条且仅由一条免费道路的路径连接且刚好保留K条鹅卵石路 思路: 并查集 先将所有水泥路都加入并查集中 然后找到那些必须被加入的鹅卵石路 再补上其他的鹅
阅读全文
摘要:题目大意: q次询问 每次询问x 有多少个点对(a,b)满足这两点间存在一条路径使路径上所有边权<=x 思路: 离线下来并查集 并查集时候记一下连通块大小 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cst
阅读全文
摘要:给定一张N个顶点M条边的无向图 每条边上带有权值 所有权值都可以分解成2^a*3^b的形式 q个询问,每次询问给定四个参数u、v、a和b,请你求出是否存在一条顶点u到v之间的路径,使得路径依次经过的边上的权值的最小公倍数为2^a*3^b 注意:路径可以不是简单路径 下面是一些可能有用的定义: 最小公
阅读全文
摘要:题目大意: 一个n个点m条边的无向图,现在依次删除k个点及它们的边 求开始有几个联通块及每次删除一个点后的联通块 思路: 直接做不太好做 所以我们可以把删除离线下来 先把不被删的点之间都连起来,联通块个数即为最后一次的输出 然后倒序加入每个被删的点 再倒序输出即可 1 #include<iostre
阅读全文
摘要:题目大意: 一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000) 两个顶点S和T,求一条路径,使得路径上最大边和最小边的比值最小 如果S和T之间没有路径,输出”IMPOSSIBLE” 否则输出这个比值(最简) 思路: 我们可以枚举所有边的下限 先
阅读全文
摘要:题目大意: 在某城市里住着n个人,任何两个认识的人不是朋友就是敌人,满足 1、 我朋友的朋友是我的朋友 2、 我敌人的敌人是我的朋友 所有是朋友的人组成一个团伙 告诉你关于这n个人的m条信息,即某两个人是朋友,或者某两个人是敌人,计算出这个城市最多可能有多少个团伙 思路: 对于每个人用两个点表示 一
阅读全文
摘要:题目大意: 有一些生物,可能是A B C中的三种 其中A吃B B吃C C吃A 有人用两种说法对这 N 个动物所构成的食物链关系进行描述 第一种说法是“1 X Y”,表示 X 和 Y 是同类。 第二种说法是“2 X Y”,表示 X 吃 Y 。 此人对 N 个动物,用上述两种说法,一句接一句地说出 K
阅读全文

浙公网安备 33010602011771号