维修道路(repair)

时间限制: 1 Sec  内存限制: 128 MB

题目描述

由于在十多年前道路改建时的突出贡献, Bob 被任命为维修道路的承包商, 他可以任意

选择两条路径去修理。

Bob 刚刚获悉,这 n 个村庄相互连通,而且总共只有 n-1 条边。

众所周知, Bob 修理这两条道路得到的获益是两条路径的长度的积, 所以当然他想最大

化他的获益。

但是, Bob 又不希望别人在背后说他坏话, 所以他希望这两条路径满足以下两个条件:

1. 这两条路径都是某两个村庄之间的最短路径。 (某两个村庄就是路径的起点和终点)

2. 这两条路径不会经过同一个村庄。

输入

第一行输入 n。 表示村庄个数。

接下来 n-1 行,每行两个数,表示这两个村庄之间有一条无向边。

输出

输出获益的最大值。

样例输入

4
1 2
2 3
3 4
 
7
1 2
1 3
1 4
1 5
1 6
1 7
 
6
1 2
2 3
2 4
5 4
6 4

样例输出

1
0
4

提示

1.选择(1->2)和(3->4) Ans=1*1

2.不管怎么选择这两条路径,一定会经过 1

3.选择(1->3)和(5->6) Ans=2*2=4

emmmm
其实不难
题意:在一棵树上找到两条不相交的路径(不能有点重合), 并且是两点之间的最短路径
使这两个路径长度的乘积最大
可以发现,这两条在树上了路径,肯定是两个不同的部分中(因为他在树上qwq)
那我们就枚举断掉树的一条边,然后再分别求这两个树的直径就是最优的答案了。
这个是O(n^2)的
有两个点T掉了
怎么办呢
这个简单,直接打表优化awa
我们直接分类讨论,讨论直径是否断开,如果不断开,那么结果是直径长度与挂在直径下面的子树的直径乘积。
设直径的左右端点为A和B,断开直径的一条边,那么结果就是左边某个点到A的长度和右边某个点到B的长度,可以通过维护前缀的和后缀,分别维护左边到达A和右边到达B的最长路。
直接引用题解

qwq

这个代码没写awa

O(n^2)的有qwq
奉上

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,tot=1,flag1,flag2,head[1000001];
int sum,ret,ans,id;
struct edge
{
int next,to;
}e[1000001];
inline ll read()
{
char c=getchar();ll a=0,b=1;
for(;c<'0'||c>'9';c=getchar())if(c=='-')b=-1;
for(;c>='0'&&c<='9';c=getchar())a=a*10+c-48;
return a*b;
}
inline void add(int i,int j)
{
e[++tot].next=head[i];
e[tot].to=j;
head[i]=tot;
}
void dfs(int x,int fa,int dis,int opt)
{
if(opt==1&&x==flag2) return;
if(opt==2&&x==flag1) return;
if(dis>ret)ret=dis,id=x;
for(int i=head[x];i!=0;i=e[i].next)
{
int u=e[i].to;
if(u==fa)continue;
dfs(u,x,dis+1,opt);
}
}
int main()
{
n=read();
for(int i=1;i<n;i++)
{
int x=read(),y=read();
add(x,y);add(y,x);
}
for(int i=2;i<=tot;i+=2)
{
ret=0;sum=0;id=0;
flag1=e[i].to;
flag2=e[i^1].to;
dfs(flag1,flag2,0,1);
ret=0;
dfs(id,flag2,0,1);
sum=ret,ret=0,id=0;
dfs(flag2,flag1,0,2);
ret=0;
dfs(id,flag1,0,2);
sum*=ret;
ans=max(ans,sum);
}
cout<<ans<<endl;
return 0;
}

维修道路(repair)的更多相关文章

  1. Openjudge 235 丛林中的路

    好久没练最小生成树了 253:丛林中的路 总时间限制: 1000ms 内存限制: 65536kB 描述 热 带岛屿Lagrishan的首领现在面临一个问题:几年前,一批外援资金被用于维护村落之间的道路 ...

  2. hdu 1301 Jungle Roads 最小生成树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1301 The Head Elder of the tropical island of Lagrish ...

  3. OpenJudge/Poj 1251 丛林中的路/Jungle Roads

    1.链接地址: http://bailian.openjudge.cn/practice/1251/ http://poj.org/problem?id=1251 2.题目: 总时间限制: 1000m ...

  4. #最小生成树# #kruskal# ----- OpenJudge丛林中的路

    最小生成树 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边.最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法 ...

  5. 免费道路 bzoj 3624

    免费道路(1s 128MB)roads [输入样例] 5 7 21 3 04 5 13 2 05 3 14 3 01 2 14 2 1 [输出样例] 3 2 04 3 05 3 11 2 1 题解: ...

  6. IT从业者的职业道路(从程序员到部门经理) - 项目管理系列文章

    十年前,笔者还是一个刚毕业的大学生,对IT业只是停留在学校的编程知识领域.刚出社会,有很多需要学习的地方.在这十年间,笔者经历了程序员,技术经理,项目经理,部门经理等职位.本文就是要说说如何从程序员到 ...

  7. 理解 OpenStack + Ceph (9): Ceph 的size/min_size/choose/chooseleaf/scrubbing/repair 等概念

    本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...

  8. AC日记——寻找道路 洛谷 P2296

    题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...

  9. 【BZOJ-3195】奇怪的道路 状压DP (好题!)

    3195: [Jxoi2012]奇怪的道路 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 305  Solved: 184[Submit][Statu ...

  10. codevs1183 泥泞的道路

    题目描述 Description CS有n个小区,并且任意小区之间都有两条单向道路(a到b,b到a)相连.因为最近下了很多暴雨,很多道路都被淹了,不同的道路泥泞程度不同.小A经过对近期天气和地形的科学 ...

随机推荐

  1. Java求数组元素的最大值和最小值

    代码如下: public static void main(String[] args) { int [] a = {1,2,3,88,2,90}; int max = a[0]; int min = ...

  2. python中引用自己封装的包飘红线处理办法

    1.安装 opencv-contrib-python  可解决引用自己包名提示 无法识别 2.取消unresolved referencesde 的勾勾

  3. 自研ORM 子查询&嵌套查询

    作者 Mr-zhong 代码改变世界.... 一.前言 Fast Framework 基于NET6.0 封装的轻量级 ORM 框架 支持多种数据库 SqlServer Oracle MySql Pos ...

  4. 一行命令使用 Docker 编译 Latex 文件,简单优雅

    使用 Docker 编译 LaTeX 文章 LaTeX 是一种常用的排版系统,它可以帮助用户创建漂亮.专业的文档.但是,安装和配置 LaTeX 比较麻烦,特别是对于初学者而言. Docker 是一个开 ...

  5. .NET周刊【7月第2期 2023-07-09】

    由于这周比较忙,只给出了标题和链接,没有具体的简介. 另外根据粉丝朋友的反馈,".NET周报" 更名为 ".NET周刊",希望大家喜欢 : ) 国内文章 Ava ...

  6. P3755 [CQOI2017]老C的任务题解

    如果询问 \(x_1, y_1, x_2, y_2\), 那么询问 \((x_2, y_2)\), \((x_2, y_1 - 1)\), \((x_1 - 1, y_2)\) \((x_1 - 1, ...

  7. Kubernetes安全框架

    Kubernetes安全框架 K8S安全控制框架主要由下面3个阶段进行控制,每一个阶段都 支持插件方式,通过API Server配置来启用插件. Authentication(鉴权):身份鉴别,只有正 ...

  8. 【MAUI Blazor踩坑日记】5.macOS上的缩放比例

    macOS的页面默认比较小,原因貌似是因为符合iPad吧, 这个没啥好说的,看微软文档就可以了https://learn.microsoft.com/zh-cn/dotnet/maui/mac-cat ...

  9. Linux 命令:lsof

    参考文档:lsof命令详解 lsof,列出系统中所有打开的文件. 各列字段意义如下: COMMAND: 进程的名称 PID: 进程标识符 USER: 进程所有者 FD: 文件描述符,应用程序通过文件描 ...

  10. 2021-11-30 WPF的MVVM绑定

    主页面代码 public partial class MainWindow : Window { MainViewModel mainViewModel = null; public MainWind ...