随笔分类 - OI
摘要:题意:有N个人,每个人有一个初始想法(0/1)和ki个朋友,安排每个人的最终想法,使得|违心的人数+不同意见的朋友的对数|最小 题解: S向每个0连流量为1的边,表示违心;同理每个1向T连流量为1的边。如果两人是朋友,连一条流量为1的边,表示可以对立。 然后网络流/最小割走起。 #include <
阅读全文
摘要:题意:给定一个序列,维护:1、插入一个元素 2、求相邻两个元素中,差值绝对值的最小值 3、求序列排序后相邻两个元素中,差值绝对值的最小值 题解: MIN_GAP:如果我们把数看成一组一组,每次插入数字都在一组的最后插入,那么答案只有可能在组内和组间两个位置产生,定义l[i]为一组数中最左边的数,r[
阅读全文
摘要:题意:Xn+1=(aXn+c)%M,求XN%G 题解:矩阵乘法裸题 #include <cstdio> #include <cstring> #include <cstdlib> #include <climits> #include <iostream> #include <algorithm>
阅读全文
摘要:题意:给定一颗字符树,求树中路径所构成的不同的字符串的数量,其中AB和BA视作不同的字符串 题解: 题目里有这样一句话:太阳花田的结构比较特殊,只与一个空地相邻的空地数量不超过20个。 一共有10W个点,却只有20个叶子……因此树上所有的字串就是以叶子为起点搜索出的所有字串,丽洁姐真的好善良啊- -
阅读全文
摘要:题意:初始时给定一个空串,在其后不断加字符,求每次加入后不同子串的数量 题解: 当时拿到这个题一眼看出用后缀数组啥的,然而我并不会QAQ……不耸,不会后缀数据结构我们会HASH是不是,于是用HASH水了30分,能进R2真是命大2333 讲题的时候标算用的后缀数组,不过看他写了半个黑板就感觉好麻烦。Y
阅读全文
摘要:题意:给定一个字符串,维护:1、在当前字符串后面插入一个字符串 2、询问一个字符串在当前字符串中出现的次数。强制在线 题解:维护自动机,一个字符插入之后其祖先的出现次数全部++,这个可以拿LCT或者暴力来维护,链上修改单点查询。 #include <cstdio> #include <cstring
阅读全文
摘要:题意:求一个字符串的第K小字串,T=0表示不同位置相同的子串算作一个,T=1算作多个 题意: 建出SAM来跑第K子串,由于一个点所代表的子串在原串出现次数为其子树叶子结点的数量,因而有: T==1,每个点的|right|=1 T==2,每个点的|right|=子树叶子结点数 BFS跑出所有子串出现的
阅读全文
摘要:题意:给定一张无向图,有K个人,每一时刻K个人可以同时走(也可以停在一个节点),在到达i之前必须先到达i-1,求从0到N,K个人走的最小距离和(只需一个人到达即可) 题解: 用Floyd跑出任意两个城市i j间的最短路,更新的前提是k<j(要到达城市j必须先到达1->j-1) 将每个城市拆成两个点A
阅读全文
摘要:题意:有n类产品,其中第i类产品共需要Ci件。有m名员工,员工能够制造的产品种类有所区,一件产品必须完整地由一名员工制造,对于员工i,他的愤怒值与产品数量之间的函数是一个Si+1段的分段函数。当他制造第1~Ti,1件产品时,每件产品会使他的愤怒值增加Wi,1,当他制造第Ti,1+1~Ti,2件产品时
阅读全文
摘要:题意:给定一张有向图,求一个路径集合,集合中的路径满足:1、起点为1,终点出度为0 2、集合中的路径覆盖了所有的点 3、在满足前两个条件的基础上,路径权值和最小 题解: 显然是个带下界的有源费用流。按照如下方式建模,对于一条边权为w的边(u,v)和任意一个点x x向T连容量为k费用为0的边,表示其后
阅读全文
摘要:题意:有N种菜,M位厨师,每位厨师做每种菜的时间不同。有K个人,每个人点ki个菜,求最小等待时间。 题解: 和BZOJ1070一个题,不过多了一个N,因此考虑优化。 显然决策倒数第K个菜的前提是倒数第K-1个菜已经决定完成,因此SPFA每搜出一条路径,就在这个厨师这里加边。说白了就是动点。 #inc
阅读全文
摘要:题意:给定N辆车和M个人,每个人修每辆车的时间不同,安排修理顺序使得修理这N辆车时间总和最小 题解: 将每个工作人员拆点,某个车b向ai连边表示工作人员a倒数第i个修理该车,显然其对答案的贡献(该边费用)就是w[b][a]*i(其后所有等待的车都要受其影响,而之前的车都不会)。 构图两排点,左边是车
阅读全文
摘要:题意:给定一张有向图,求1到N:1、最多有多少条不相交的路径 2、在第一问的基础上,求所有路径的最小距离和 题解:拆点之后费用流裸题 #include <queue> #include <cstdio> #include <cstring> #include <cstdlib> #include <
阅读全文
摘要:题意:一个N M的矩形区域。格子如果是'.',那么表示这是一块空地;如果是'X',那么表示这是一面墙,如果是'D',那么表示这是一扇门,人们可以从这儿撤出房间。已知门一定在房间的边界上,并且边界上不会有空地。每块空地上都有一个人,在疏散的时候,每一秒钟每个人都可以向上下左右四个方向移动一格,当然他也
阅读全文
摘要:题意:求一张图的最大独立点集 题解:先用Floyd把每个点是否连通跑出来,然后拆点做二分图,左边一列,右边一列,如果u v连通,则将左边的u和右边的v相连,由于需要求一个最大的点集使得其中的任意两个点均不连通,所以跑最大独立集=总点数-最大匹配。 #include <queue> #include
阅读全文
摘要:题意:求1到N的所有最短路方案上的最大流,阈值在每个点上 题解:呵呵哒 #include <queue> #include <vector> #include <functional> #include <cstdio> #include <cstring> #include <cstdlib> #
阅读全文
摘要:题意:有三种人:1、该校回家生 2、该校不回家生 3、非该校住宿生。给出人的认识关系,假若a认识b,则b(a)可以睡在a(b)的床上,只有该校的学生有床,回家生不占床位,求是否能让所有留宿的人都有床睡 题解:建二分图,左边是宿舍右边是学生。从S向需要宿舍的学生连边,从能提供宿舍的位置向T连边,如果某
阅读全文
摘要:题意:给出一个N*N的矩阵B和一个1*N的矩阵C。求出一个1*N的01矩阵A.使得D=(A*B-C)*A^T最大。其中A^T为A的转置。输出D 题解:D=A*B*AT-A*C,逐项分析,减号前面那一项,是如果要拥有B[i][j]的价值,前提是A[i]=A[j]=1;减号后面那一项,是要让A[i]=1
阅读全文
摘要:题意:给定一张图,求每一条边:1、是否在一个最小割的方案里 2、是否在每一个最小割的方案里 题解: 先做最小割,然后在残余网络上缩点。对于一条边(u,v) 如果f[u]!=f[v],则(u,v)可以在某个最小割上(缩点后的图上的边均为满流边) 如果f[u]==f[S] && f[v]==f[T],则
阅读全文
摘要:题意:给定一个N*N的网格,每个格点均与周围的八个点连边,每条边有一个边权,求安排每个点的点权h,使$\sum\limits_{e \in G} {e.w \times \min \{ ({h_{e.u}} - {h_{e.v}}),0\} }$最小 题解:所有高度一定不是0就是1,而且一定有一条线
阅读全文

浙公网安备 33010602011771号