维修道路(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. 精选8道ES高频面试题和答案,后悔没早点看。

    不要再干巴巴的背诵八股文了,一定要结合具体场景回答面试问题! 前言 我们在回答面试题的时候,不能干巴巴的去背八股文,一定要结合应用场景,最好能结合过去做过的项目,去和面试官沟通. 这些场景题虽然不要求 ...

  2. Java 数组及数组的优点与缺点

    1.java中的数组是一种引用数据类型.不属于基本数据类型.数组的父类是Object. 2.数组实际上是一个容器,可以同时容纳多个元素.(数组相当于是一个数据的集合.) 数组的字面意思是"一 ...

  3. 【WALT】update_task_demand() 代码详解

    目录 [WALT]update_task_demand() 代码详解 代码展示 代码逻辑 用于判断是否进入新窗口的标志位 ⑴ 不累加任务运行时间的条件判断 ⑵ 仍在旧窗口中 ⑶ 进入新窗口 ⑷ 返回值 ...

  4. CPython, Pypy, MicroPython...还在傻傻分不清楚?

    哈喽大家好,我是咸鱼 当我们说 Python 时,通常指的是官方实现的 CPython 但还有很多比如 Pypy.Jython.MicroPython.Brython.RustPython 等 &qu ...

  5. Blazor前后端框架Known功能介绍:系统安装激活及自定义

    本章介绍系统安装与激活及其自定义功能. 概述 框架内置简单的系统安装功能. 录入企业编码.名称.系统名称.产品密钥.管理员密码信息完成安装. 可自定义高级安装功能,如安装数据库等您产品所需的安装信息. ...

  6. SDK 接入|游戏语音之“范围语音”接入实践

    语音是线上游戏用户的主要交流方式,大多数用户会通过游戏中的内置语音功能与其他玩家沟通,而一些用户在游戏没有内置语音功能的情况下,通过其他语音软件与玩家沟通. 并且,游戏语音在玩家开黑时承担着至关重要的 ...

  7. 如何给Github上的开源项目提交PR?

    前言 对于一个热爱开源的程序员而言,学会给GitHub上的开源项目提交PR这是迈出开源的第一步.今天我们就来说说如何向GitHub的开源项目提交PR,当然你提交的PR可以是一个项目的需求迭代.也可以是 ...

  8. Linux 脚本:冒泡排序

    #!/bin/bash arr=(3 2 5 4 1) len=${#arr[@]} for i in $(seq 1 $len) ; do index=$(($len - $i - 1)) for ...

  9. CF939F Cutlet 题解

    题意简述 有一个正反面都为 \(0\) 的卡片,每过 \(1\) 分朝下那一面的数值就会增加 \(1\),你可以在几个区间的时间内翻转卡片,求经过 \(2n\) 秒后能否让这个卡片的正反面的数都为 \ ...

  10. 【故障公告】一而再,再而三,三翻四复:数据库服务器 CPU 100%

    会员救园,故障捣乱,每当困难时,故障们总是喜欢雪上加霜过来考验你. 今天下班前 17:43~17:47 期间,园子的 SQL Server 数据库服务器突然出现 CPU 100% 问题. 发现问题后, ...