随笔分类 -  洛谷

摘要:主席树求区间不同数字个数模板题。 求不同个数就是把数组下标建一颗主席树,如果当前数字已经在前面出现过,那么在当前线段树里把之前出现的区间-1,然后把现在出现的区间+1。 -1是因为当前点和重复数字出现的区间所组成的区间答案要减1,+1相当于现在出现了一个新的数字。 查询的时候查询第R颗线段树的出现L 阅读全文
posted @ 2018-08-31 16:29 LMissher 阅读(177) 评论(0) 推荐(0)
摘要:题目是一个n个点的数,q次询问,每次询问回答一条路径上第k小数。 在树上建主席树,每个点的状态可以从父亲节点得到。 求答案时答案由路径两个端点的权值线段树之和减去lca和lca父亲节点的权值线段树之和。 因为两个端点的权值线段树之和会多算一次跟节点到lca路径上出现的权值以及根节点到lca父亲节点路 阅读全文
posted @ 2018-08-31 14:46 LMissher 阅读(169) 评论(0) 推荐(0)
摘要:SPFA求负环模板(dfs无情被卡掉,老老实实用bfs比较好) #include <bits/stdc++.h> #define mem(x) memset(x,0,sizeof(x)) #define mem1(x) memset(x,-1,sizeof(x)) using namespace s 阅读全文
posted @ 2018-08-30 22:05 LMissher 阅读(156) 评论(0) 推荐(0)
摘要:给一个有向图,奶牛每次从图中任意一个点出发回到该点(至少经过两个点)。问sigma(点权)/sigma(边权)的最大值可以是多少。 首先从起点出发回到起点所经过的路程肯定是一个环。设最大值为ans。那么sigma(点权)/sigma(边权)=ans。 稍微化简上式子可以得到sigma(边权)*ans 阅读全文
posted @ 2018-08-30 20:54 LMissher 阅读(165) 评论(0) 推荐(0)
摘要:给一幅图,求乘积最短的路径。 把乘积取对数就能变成普通的最短路。 #include <bits/stdc++.h> using namespace std; const int M = 1e6+7; const double inf = 2147483647; const int mod = 998 阅读全文
posted @ 2018-08-29 15:38 LMissher 阅读(201) 评论(0) 推荐(0)
摘要:题意给一个图,问从1节点出发到所有i节点的最短路有多少条,边权都为1。 维护一个ans,如果dis[v]>dis[u]+1,那么ans[v]=ans[u]并更新距离。如果dis[v]==dis[u]+1,那么ans[v]+=ans[u]。 #include <bits/stdc++.h> #defi 阅读全文
posted @ 2018-08-29 15:37 LMissher 阅读(212) 评论(0) 推荐(0)
摘要:题意是有n个没有安装的软件包形成一个树形结构,安装一个软件包必须把它的所有祖先一起安装,卸载一个软件包必须把它的所有子孙一起卸载。 q次操作,每次可能安装一个节点也可能卸载一个节点,问每次操作会改变多少个节点的状态。 安装是对链操作,卸载是对子树操作。线段树维护区间内的安装数量与未安装数量,更新的时 阅读全文
posted @ 2018-08-29 14:32 LMissher 阅读(285) 评论(0) 推荐(0)
摘要:树链剖分模板题。更新一条链的值以及求一条链的值。 熟练剖分就是把树剖成重链与轻链,然后利用重链的性质快速的把要更新的两个节点间的路径快速进行更新,也就是快速找到lca。进行更新或查询。 #include <bits/stdc++.h> #define Lson l,mid,rt<<1 #define 阅读全文
posted @ 2018-08-27 10:57 LMissher 阅读(163) 评论(0) 推荐(0)