首页 > 其他分享 >岛屿

岛屿

时间:2023-07-30 14:44:05浏览次数:23  
标签:下标 前缀 岛屿 环长 基环树 树内 环上

岛屿

给定若干棵基环树森林,求解每棵基环树的直径之和。

首先如果最长的两个点在环上某个点的子树中,可以直接求解树的直径。

若最长的两个点穿越了环,则一定是环上两点子树内最深的两个点。

对于每个基环上的点,可以求出其子树内最深的深度,设基环树上两点最长的距离为 \(S(i,j)\),然后就变成了选取两个点使得 \(S(i,j)+d(i)+d(j)\)。

可以破环为链,对 \(S\) 做前缀和,然后对于 \(j<i\),距离为 \(S_i-S_j\),那就是对于每个 \(i\),求解 \(\max(S_i+d(i)+d(j)-S_j)\),发现对于 \(i\) 来说与 \(i\) 相关的项是固定的,就是求解后面的关于 \(j\) 的式子的最大值。发现满足要求的 \(j\) 需要与 \(i\) 的距离 \(<环长\),这就是一个滑动窗口求解最值的问题,可以用单调队列。

注意寻找基环树上的环需要 dfs 中记录来的边,而不是来的点,因为这会导致两个点的环(即有重边)情况出现差错。

前缀和是指从任意一个点开始往一个方向走的前缀和,注意对 \(S\) 做前缀和时,若下标 \(\ge 环长\),则需要为 \(S_{环长-1}+S_{下标-环长}\),因为这样才能保证作差时可以恰好消去,变为真实距离。

AC

标签:下标,前缀,岛屿,环长,基环树,树内,环上
From: https://www.cnblogs.com/wscqwq/p/17591415.html

相关文章

  • 【USACO OPEN12铜组】岛屿
    【USACOOPEN12铜组】岛屿目录【USACOOPEN12铜组】岛屿题目描述输入格式输出格式数据范围输入样例:输出样例:思路code2014.岛-AcWing题库题目描述每当下雨时,农夫约翰的田地总是被洪水淹没。由于田地不是完全水平的,所以一些地方充满水后,留下了许多被水隔开的“岛”。约翰的......
  • 最大岛屿体积,图的用法
    publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);intnum1=scanner.nextInt();intnum2=scanner.nextInt();int[][]arr=newint[num1][num2];while(scanner.hasNext()){......
  • LeetCode 200. 岛屿数量
    classSolution{public:boolst[310][310];intdx[4]={0,0,-1,1},dy[4]={-1,1,0,0};intm,n;intnumIslands(vector<vector<char>>&g){intres=0;n=g.size(),m=g[0].size();for(inti=0;i<n;i++)......
  • 1254. 统计封闭岛屿的数目
    1254.统计封闭岛屿的数目二维矩阵grid 由0 (土地)和1 (水)组成。岛是由最大的4个方向连通的0 组成的群,封闭岛是一个 完全由1包围(左、上、右、下)的岛。请返回封闭岛屿的数目。示例1:输入:grid=[[1,1,1,1,1,1,1,0],[1,0,0,0,0,1,1,0],[1,0,1,0,1,1,1,0],[1,0,0,0,0,1......
  • Golang刷题日志--岛屿问题
    1.给你一个由'1'(陆地)和'0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例代码:import"fmt"funcnumIsIands(grid[][]byte)int{ //记录岛......
  • 2023-05-07:给你一个大小为 n x n 二进制矩阵 grid 。最多 只能将一格 0 变成 1 。 返
    2023-05-07:给你一个大小为nxn二进制矩阵grid。最多只能将一格0变成1。返回执行此操作后,grid中最大的岛屿面积是多少?岛屿由一组上、下、左、右四个方向相连的1形成。输入:grid=[[1,0],[0,1]]。输出:3。来自亚马逊、谷歌、微软、Facebook、Bloomberg。......
  • 2023-05-07:给你一个大小为 n x n 二进制矩阵 grid 。最多 只能将一格 0 变成 1 。 返
    2023-05-07:给你一个大小为nxn二进制矩阵grid。最多只能将一格0变成1。返回执行此操作后,grid中最大的岛屿面积是多少?岛屿由一组上、下、左、右四个方向相连的1形成。输入:grid=[[1,0],[0,1]]。输出:3。来自亚马逊、谷歌、微软、Facebook、Bloomberg。答案2023......
  • 回溯 78.子集 200. 岛屿数量
    回溯算法为什么for循环嵌套很难解决解决问题当问题需要"回头",以此来查找出所有的解的时候排列组合切割(切割字符串)子集把子集列出来棋盘 N皇后/解数独是什么只要有递归,就有回溯也是一种纯暴力搜索算法可以抽象成一个树形结构递归函数没有返回值(ba......
  • 第八届河南省赛 zzuoj 10407: B.最大岛屿
    10407:B.最大岛屿TimeLimit:1SecMemoryLimit:128MBSubmit:29Solved:17[Submit][Status][WebBoard]Description神秘的海洋,惊险的探险之路,打捞海底宝藏,激烈的海战,海盗劫富等等。加勒比海盗,你知道吧?杰克船长驾驶着自己的的战船黑珍珠1号要......
  • leetcode200.岛屿数量
    title:leetcode200.岛屿数量题目描述:给你一个由'1'(陆地)和'0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例1:输入:grid=[["1","1","1","......