loj2092 「ZJOI2016」大森林】的更多相关文章

ref不是太懂-- #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> using namespace std; int n, m, tot, val[200005], fa[200005], idx[200005], num, lf[200005], cnt; int ans[200005], ch[200005][2], sum[200005], rg…
「ZJOI2016」大森林 神仙题... 很显然线段树搞不了 考虑离线操作 我们只搞一颗树,从位置1一直往后移动,然后维护它的形态试试 显然操作0,1都可以拆成差分的形式,就是加入和删除 因为保证了操作2的合法性,我们不妨先不计合法性把所有点加到树中 显然每个点要连到在这个点之前的离这个点时间上最近那个1操作的点上 然后可以发现移动时1操作相当于很多个点换根 我们可以对每个1操作建一个虚点,然后就可以很方便换根了 那么如何保证查询操作呢? 可以把每个1操作的虚点大小设成0(代表它父亲边的直接长度…
目录 @description@ @solution@ @accepted code@ @details@ @description@ 小 Y 家里有一个大森林,里面有 n 棵树,编号从 1 到 n.一开始这些树都只是树苗,只有一个节点,标号为 1.这些树都有一个特殊的节点,我们称之为生长节点,这些节点有生长出子节点的能力.小 Y 掌握了一种魔法,能让第 l 棵树到第 r 棵树的生长节点长出一个子节点.同时她还能修改第 l 棵树到第 r 棵树的生长节点.她告诉了你她使用魔法的记录,你能不能管理她…
「ZJOI2016」解题报告 我大浙的省选题真是超级神仙--这套已经算是比较可做的了. 「ZJOI2016」旅行者 神仙分治题. 对于一个矩形,每次我们从最长边切开,最短边不会超过 \(\sqrt{n\times m}\),所以对于每个点跑一遍最短路就行了. 时间复杂度 \(O(n\sqrt{n}\log n+q\sqrt{n})\) \(Code\ Below:\) #include <bits/stdc++.h> #define id(i,j) (((i)-1)*m+(j)) using…
「ZJOI2016」旅行者 对网格图进行分治. 每次从中间选一列,然后枚举每个这一列的格子作为起点跑最短路,进入子矩形时把询问划分一下,有点类似整体二分 至于复杂度么,我不会阿 Code: #include <cstdio> #include <cctype> #include <cstring> #include <queue> #include <vector> #include <algorithm> using std::mi…
LOJ#2230. 「BJOI2014」大融合 题目描述 小强要在$N$个孤立的星球上建立起一套通信系统.这套通信系统就是连接$N$个点的一个树.这个树的边是一条一条添加上去的. 在某个时刻,一条边的负载就是它所在的当前能够联通的树上路过它的简单路径的数量. 例如,在上图中,现在一共有五条边.其中,$(3,8)$这条边的负载是$6$,因为有六条简单路径$2-3-8,\ 2-3-8-7,\ 3-8,\ 3-8-7,\ 4-3-8,\ 4-3-8-7$路过了$(3,8)$. 现在,你的任务就是随着边…
2090. 「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}\). \(f(n)=2*f(\frac{n}{2})+S\sqrt{S}logS.所以总的复杂度就是\)\(S\sqrt{S}…
题目描述 小Y家里有一个大森林,里面有 $n$ 棵树,编号从 $1$ 到 $n$ .一开始这些树都只是树苗,只有一个节点,标号为 $1$ .这些树都有一个特殊的节点,我们称之为生长节点,这些节点有生长出子节点的能力. 小Y掌握了一种魔法,能让第 $l$ 棵树到第 $r$ 棵树的生长节点长出一个子节点.同时她还能修改第 $l$ 棵树到第 $r$ 棵树的生长节点. 她告诉了你她使用魔法的记录,你能不能管理她家的森林,并且回答她的询问呢? 输入格式 第一行包含 2 个正整数 $n,m$,共有 $n$…
题目链接 戳我 \(Solution\) 两个变量,emm...不好搞啊. 于是我们可以按照\(A\)排序.然后动态加边,因为\(A\)是越来越大,所以不需要管他,只要使得\(1\)~\(n\)的路径中\(B\)最大值最小.这用LCT维护生成树就好了,模板题.每次加边后满足\(1\)~\(n\)有路径的时候将 此时最大的\(B\)+当前\(A\),去\(min\),最后输出即可 \(Code\) #include<bits/stdc++.h> #define rg register #defi…
目录 @description@ @solution@ @accepted code@ @details@ @description@ 小 Y 来到了一个新的城市旅行.她发现了这个城市的布局是网格状的,也就是有 n 条从东到西的道路和 m 条从南到北的道路,这些道路两两相交形成 n*m 个路口 (i, j) (1<=i<=n, 1<=j<=m). 她发现不同的道路路况不同,所以通过不同的路口需要不同的时间.通过调查发现,从路口 (i, j) 到路口 (i, j+1) 需要时间 r(…