关闭

[置顶] 模板和学习笔记

----------------------------------- 点分治 一般步骤: 1.找到树的重心(避免当树退化成链时复杂度升高) 2.从重心出发分治统计路径 分治过程: 统计当前节点子树中的符合条件的路径数加到ans中 标记当前点避免重复 减去当前节点子树节点中的符合条件的路径数(这样剩下的就是经过当前节点的路径数,不会重复了) 在当前节点的子树中分别找到重心...
阅读(123) 评论(0)

[置顶] 日记<持续更新>

4.3 莫名想开一个日记,有时间就记一些不大不小的事,比如每天学了什么或者路遇哪位神犇 最主要的目的是要监督一下自己的学习进度 就酱...
阅读(477) 评论(4)

51nod 1204 Parity[并查集]

脑补一个前缀和数组pre 对于给出的[l,r][l,r]的区间和的奇偶性: 若为odd(奇数):转化为pre[r]pre[r]和pre[l−1]pre[l-1]的奇偶性不同 若为even(偶数):转化为pre[r]pre[r]和pre[l−1]pre[l-1]的奇偶性相同 用并查集维护.[1,n][1,n]表示奇偶性相同,[n+1,2∗n][n+1,2 \ast n]表示奇偶性不同#incl...
阅读(169) 评论(0)

51nod 1461 稳定桌[线段树]

跟风打道题 枚举最长的长度,那么当前的长度全部不砍肯定最优 长度比这个大的一定要砍,可以直接求和 如果数量没到总共的一半,就从比当前长度小的桌腿里砍掉一些来满足题设,可以用线段树维护 (用堆也行,移步jz大佬的博客)#include #include #include #define N 100000 #define LL long lo...
阅读(31) 评论(0)

51nod 1611 金牌赛事&&cf115E [线段树]

感觉思路很清晰 想到dp,按比赛所需的道路右端点排序 f[i]表示举办第i场比赛为止能获得的最大利润 然后按顺序把每场比赛的收益加入线段树求个最值即可维护最大获利#include #include #define N 200000 #define LL long long using namespace std;struct node{ int l...
阅读(30) 评论(0)

51nod 1378 夹克老爷的愤怒[贪心][树形dp?]

假如是链上的话就直接贪心搞,每隔2∗k2*k放一个守卫 现在搞到树上 f[i]表示节点i的子树已经全受控制,还可以向上控制f[i]个单位 那么假如当前节点和它的子树节点已经相差为2*k个单位则要加一个家丁 如果当前节点的子树之间可以互相覆盖也是要考虑进去的…假如不能覆盖就要用当前最小的那个了… //感觉叙述不清啊…反正我自己知道怎么做就好了,5个点头盾看题解换10个还是很值的#includ...
阅读(36) 评论(0)

51nod 1199 Money out of Thin Air[线段树]

题面 把树按dfs序搞成序列然后直接线段树维护就好了#include #include #define N 50000 #define LL long long using namespace std;vectore[N+5]; int n,m,fa[N+5],xl[N+5],size,L[N+5],R[N+5]; LL sum[N*4+5],lazy[N...
阅读(26) 评论(0)

51nod 1122 机器人走方格 V4[矩阵快速幂]

题面 计算到达从某个点到某个点的方案数,考虑构造矩阵:给四个格子编号,构造可达矩阵 然后快速幂计算完把合法的答案累计一下就好了#include #include #define N 4 #define P 1000000007 #define LL long long using namespace std;const int p[N][N]={ {0,...
阅读(29) 评论(0)

51nod 1288 汽油补给[贪心][st表][单调栈]

题面 考虑走到第i个城市,接下来,如果在装满油箱的情况下能走到的城市中,有油价比城市i低的城市:就加油到可以到这个城市为止然后过去 否则在当前城市加满油继续 对于油价可以用st表维护最小值 每个城市可以到的城市可以用单调栈预处理出来#include #include #define N 100000 #define LL long long using name...
阅读(31) 评论(0)

51nod 1274 最长递增路径[dp]

题面 题意:给定一张有重边有自环的无向图,求一条最长的路径使路径的权值严格单调递增把边从小到大排序后直接推 注意一下边权相同的就好了#include #include #define N 50000 using namespace std;struct edge { int x,y,z; bool operator < (const edge...
阅读(20) 评论(0)

51nod 1597 有限背包计数问题[dp][阈值]

居然是读阈(yu第四声)值… 对于大小≤n√\leq \sqrt n的物品做多重背包(前缀和优化O(n)O(n)) 对于大小≥n√\geq \sqrt n的物品完全背包魔改一下:g[i][j]表示用i个物品体积为j的方案数g[i][j]g[i][j]表示用i个物品体积为j的方案数g[i][j] g[i][j]=g[i][j−i]+g[i−1][j−n√−1](前i个物品体积都加1,加入一个体积...
阅读(73) 评论(0)

BZOJ 1999: [Noip2007]Core树网的核[dfs]

1.对于树中的任意一点,距离其最远的点一定是树的直径的某一端点 2.同一棵树的直径的中点相同(题目里给出来的,虽然不知道怎么用) 3.要求的一定在直径上,并且越长越好(不在直径上的点到端点的距离≥\geq直径上的点到端点的距离,都取较大的那个) 4.任意搞一条直径求出来的偏心距是一样的随意求一条直径,然后抠出来枚举头尾处理一下 当前的这条链到别的点中最长的距离为max(到两端点的距离,到不在...
阅读(23) 评论(0)

CF 717E[dfs]

题意:给定一棵树,每个节点初始有颜色,共两种颜色.你一开始在点1,走到哪个点就把它的颜色改变.输出一种合法的方案使最终的树颜色都变为11.dfs构造 对每个节点如果当前为-1就从它到父亲节点走一遍 如果当前是root为-1没有父亲就随便找个儿子走一遍再走到那个儿子上(因为是dfs处理它的儿子都已经是1了)#include #define N 200005 using namesp...
阅读(54) 评论(0)

51nod 1494 选举拉票&&cf458C

中文题面 考虑把所有人的票分别从大到小排序之后可以看做n条线段 枚举自己的票数为i,所以每条线段超过i的部分必须收买,如果还不够就到前面挑不够的 0≤b[i]≤1040 \leq b[i] \leq 10^4求前k小想到权值线段树(应该是类似的东西)#include #include #include #define N 100000...
阅读(29) 评论(0)

51nod 1624 取余最长路[set]

注意到只有三行,两个拐弯的位置 假设拐弯的位置为x,yx,y 则ans=(sum[3][n]−sum[3][y−1])+(sum[2][y]−sum[2][x−1])+sum[1][x]=(sum[3][n]−sum[3][y−1])+sum[2][y]+(sum[1][x]−sum[2][x−1])ans=(sum[3][n]-sum[3][y-1])+(sum[2][y]-sum[2][x-...
阅读(28) 评论(0)

10.15模拟赛

美团的三道原题…好多人都ak了「美团 CodeM 初赛 Round A」身体训练 随便推推O(n2)O(n^2)就过了…「美团 CodeM 初赛 Round B」景区路线规划 事实证明爆搜没前途啊…考完发现只要加个记忆化就过了… 首先两个人肯定是独立的…搜索的过程中记忆化一下dp[x][time][opt]dp[x][time][opt]表示每个人到xx点时间还剩timetime的贡献 事实...
阅读(31) 评论(0)

51nod 1515 明辨是非[并查集][set]

对于每一个数分别维护并查集和一个集合 并查集用于判断相等关系 集合用于判断不等关系:每个数的集合中原来为空,如果两个数 x,yx,y 被要求不等就将它们互相插入到集合中,然后这个可以用set实现,按集合(set)中的元素个数大小进行合并(按秩合并) 若p=1p=1,先判断是否在同一个并查集中,若不在则到set中找 若p=0p=0,先判断是否在同一个并查集中,若不在互相插入#include<c...
阅读(38) 评论(0)
76条 共6页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:8022次
    • 积分:821
    • 等级:
    • 排名:千里之外
    • 原创:76篇
    • 转载:0篇
    • 译文:0篇
    • 评论:9条
    最新评论