ICode9

精准搜索请尝试: 精确搜索
  • [ZJOI2016] 线段树2022-07-18 22:34:59

    一、题目 点此看题 二、解法 思维方式太低级了,好像最近状态还不及省选之前,要准备开始复习了。 直接使用 01-principle,先考虑对于一个 \(01\) 序列如何计算。对于序列上每个 \(0\) 的极长连续段都是独立的,可以分开来考虑,它们被两个 \(1\) 包夹住(特别地,序列边界也视为有 \(1\)) 设 \(

  • 洛谷 P3350 - [ZJOI2016]旅行者(分治+最短路+复杂度分析)2022-07-07 14:34:39

    洛谷题面传送门 肿么没有人证明复杂度,那我来证一个。 考虑分治,每次像猫树那样处理一个分治区间 \([l_x,r_x],[l_y,r_y]\) 表示当前处理 \(x_1,x_2\in[l_x,r_x]\),\(y_1,y_2\in[l_y,r_y]\) 范围内的所有询问。处理当前层的询问是好办的,考虑令 \(mid=\lfloor\dfrac{l_x+r_x}{2}\rfloo

  • [ZJOI2016]大森林2022-06-22 20:33:18

    复盘 \(\text{zzq}\) 讲的题,来写篇题解祸害社会。 可能是更好做的想法。 Description 给定 \(n\) 棵树和 \(m\) 次操作,其中每棵树均有一个初始节点(并设定为“生长节点”),操作格式有三种: 给定 \(l\) 和 \(r\) ,让区间 \([l,\ r]\) 内所有树的生长节点下添加一个子节点,子节点序号为

  • [ZJOI2016]旅行者-分治+最短路2019-10-09 22:02:14

    一道牛逼题 题目大意 给定一张\(n*m\)的网格图\((n*m\le 2\times10^4)\),\(Q(Q\le2\times10^5)\)次查询,询问两点之间的距离。 传送门1 传送门2 传送门3 传送门4 题目解法 欢迎来我博客pmt2018查看 有老哥说看到网格图就想到分治,反正我是听了题解才会的。 做法是对每次对网格图的长

  • 小星星「ZJOI2016」2019-09-07 11:02:23

    题意 给定一个图,以及一颗树。求将树上的节点重新编号后,能够被图覆盖的种类数?节点个数≤17。 思路 考虑朴素的树上dp。 设子状态为\(dp[i][j][s]\),表示节点i的编号为j,包含子树所构成的点集为s的种类数。 转移的时间复杂度为\(O(n3^n)\),完美被卡。 考虑题目给出的限制条件: 一个节

  • loj2090. 「ZJOI2016」旅行者2019-08-24 20:57:00

    loj2090. 「ZJOI2016」旅行者 链接 loj 思路 \((l,mid)(mid+1,r)\).考虑跨过mid的贡献。 假设选的中间那条线的点为gzy,贡献为\(dis(x,gzy)+dis(gzy,y)\) 那就计算n遍最短路,一次分治为\(n^2mlog{nm}\) 设S=n*m.矩阵的长度是不定的,每次取最长的边进行分治是最好的,n最坏为\(\sqrt{n

  • 【ZJOI2016】旅行者2019-07-31 18:00:16

    题面 https://www.luogu.org/problem/P3350 网格图上最短路 题解 离线+分治。 最短路两种情况,穿过中间边和没穿过中间边。 对于当前区域包含的询问: 先找当前区域中间边(尽可能切成正方形) 对中间边上的点,求当前区域内所有的点对其的最短路。 如果两点被中间边切断,那这次一定能得到最

  • bzoj4455:[Zjoi2016]小星星2019-05-01 16:38:28

    传送门 考虑假如不考虑重复映射 那么显然可以得到一个\(O(n^3)\)的树形dp 然后考虑如何去掉不合法的情况? 容斥,考虑每次只能从一个点集\(S\)里选点(也就是至多\(|S|\)个点的映射的方案数) 那么显然就可以枚举点集\(S\),做树形dp,然后容斥一下就做完了 总复杂度:\(O(2^nn^3)\) 代码: #inclu

  • P3348 [ZJOI2016]大森林2019-02-19 10:53:58

    \(\color{#0066ff}{ 题目描述 }\) 小Y家里有一个大森林,里面有n棵树,编号从1到n。一开始这些树都只是树苗,只有一个节点,标号为1。这些树都有一个特殊的节点,我们称之为生长节点,这些节点有生长出子节点的能力。 小Y掌握了一种魔法,能让第l棵树到第r棵树的生长节点长出一个子节点。同时她

  • [BZOJ4456][ZJOI2016]旅行者:分治+最短路2019-02-18 11:52:40

    分析 类似于点分治的思想,只统计经过分割线的最短路,然后把地图一分为二。 代码 #include <bits/stdc++.h> #define rin(i,a,b) for(register int i=(a);i<=(b);++i) #define irin(i,a,b) for(register int i=(a);i>=(b);--i) #define trav(i,a) for(register int i=head[a];i;i=e[i]

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有