AC通道

题目背景

马奥雷利亚诺布恩迪亚上校发动了他的第三十二次战争,让我们祝他好运。

题目描述

马孔多附近有n个城市, 有n-1条双向道路连通这些城市。上校想通过摧毁两条公路的方式对当局予以威慑。但是上校的老师 告诉他为了战略目的这两条路不可以有共同的城市。这次行动对当局的威慑效果将等于两条路径的长 度的乘积。假设每条道路的长度等于1,并且路径的长度等于道路的数量。请你帮上校造成最大的威 慑。

输入格式

单组测试数据。第一行是一个整数 n (2≤n≤200) ,n是这个马孔多附近城市的数量。接下来n-1行是 道路的信息,每一行是两个整数ai,bi,它们是城市的编号,表示ai和bi之间有一条道路直接连通。 (1≤ai,bi≤n)

输出格式

输出最大的威慑

输入输出样例

输入输出样例

输入 #1复制

4
1 2
2 3
3 4
输出 #1复制

1
输入 #2复制

2
2 1
输出 #2复制

0
输入 #3复制

6
1 2
2 3
2 4
5 4
6 4
输出 #3复制

4

说明/提示

对于35%的数据, n <= 10 对于75%的数据, n <= 100 对于100%的数据, n <= 200

思路十分简单,直接枚举每条边,将其删掉,形成两棵树,以两边的定点为起点分别找树的直径。

???

So,why is this right?

如此考虑:

题目中要求我们路径上不能有交叉,同时长度要尽量大。

对于条件2,很容易想到求树的直径。对于条件1,可以如此模拟:

要使得路径尽量长,就要走过尽可能多的边。那么,最好的方法是什么?

让两条道路相差的尽可能不远。既然如此,那么最不远的两个点是什么点?

一条边的两个端点。于是,断开这条边防止交叉,然后求分别跑树的直径即可。

AC利器:

#include<bits/stdc++.h>
using namespace std;
#define N 1010
#define ll long long /*断开一条边后分成两棵树,求两棵树的直径 */ inline int read(){
int x = , s = ;
char c = getchar();
while(!isdigit(c)){
if(c == '-') s = -;
c = getchar();
}
while(isdigit(c)){
x = (x << ) + (x << ) + (c ^ '');
c = getchar();
}
return x * s;
} struct node{
int u, v;
int next;
}t[N];
int f[N];
bool vis[N];
int dp[N];
int ans = , temp = , temp1 = ; int bian = ;
inline void add(int u, int v){
t[++bian].u = u;
t[bian].v = v;
t[bian].next = f[u];
f[u] = bian;
return ;
} void dfs(int now){
for(int i = f[now]; i;i = t[i].next){
int v = t[i].v, u = t[i].u;
if(!vis[v]){
vis[v] = ;
dfs(v);
temp = max(temp, dp[u] + dp[v] + );
dp[u] = max(dp[u], dp[v] + );
}
}
return ;
} int main(){
// freopen("terrorize.in","r",stdin);
// freopen("terrorize.out","w",stdout);
int n = read();
for(int i = ;i <= n - ;i ++){
int x = read(), y = read();
add(x, y);
add(y, x);
}
for(int i= ;i <= bian;i += ){
memset(vis, , sizeof(vis));
memset(dp, , sizeof(dp));
int v = t[i].v, v2 = t[i+].v;
vis[v] = vis[v2] = ;
temp1 = temp = ;
dfs(v);
temp1 = temp;
temp = ;
dfs(v2);
ans = max(ans, temp * temp1);
}
cout << ans << endl;
return ;
}

战略威慑 51nod提高组试题的更多相关文章

  1. 小智的糖果(Candy) 51nod 提高组试题

    luogu AC通道! (官方数据) 题目描述 小智家里来了很多的朋友,总共有N个人,站成一排,分别编号为0到N-1,小智要给他们分糖果.但 是有的朋友有一些特殊的要求,有的人要求他左右的两个人(左边 ...

  2. 小智的旅行(Bridge)51nod 提高组试题

    luogu AC传送门(官方数据) 题目描述 小智最喜欢旅行了,这次,小智来到了一个岛屿众多的地方,有N座岛屿,编号为0到N-1,岛屿之间 由一些桥连接,可以从桥的任意一端到另一端,由于岛屿可能比较大 ...

  3. 赛艇表演 51nod提高组模拟试题

    AC通道 题目描述 小明去某个地区观看赛艇比赛,这个地区共有n个城市和m条道路,每个城市都有赛艇比赛,在第i个 城市观看赛艇表演的价钱为ai, 去其他城市观看也需要支付赛艇表演的价格.任意两个城市之间 ...

  4. noip2010初赛提高组 试题详解

    转载自:https://blog.csdn.net/eirlys_north/article/details/52889970 一.单项选择题 1.与16进制数 A1.2等值的10进制数是 ( ) A ...

  5. noip2011初赛提高组 试题详解

    转载自:https://blog.csdn.net/Eirlys_North/article/details/52889993 一.单项选择题(共20题,每题1.5分,共计30分,每题有且仅有一个正确 ...

  6. 9.2 NOIP提高组试题精解(2)

    9-18 fruit.c #include <stdio.h> #define MAXN 10000 int Queue1[MAXN], Queue2[MAXN]; void Insert ...

  7. 9.2 NOIP提高组试题精解(1)

    9-16 poise.c #include <stdio.h> #define MAXN 1001 int main() { ], flag[MAXN] = { }; //保存6种砝码的数 ...

  8. NOIp 2018 普及&提高组试题答案

    你们考的咋样呢?在评论区说出自己的分数吧!

  9. 【NOIP2013提高组T3】加分二叉树

    题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都 ...

随机推荐

  1. 从入门到精通(分布式文件系统架构)-FastDFS,FastDFS-Nginx整合,合并存储,存储缩略图,图片压缩,Java客户端

    导读 互联网环境中的文件如何存储? 不能存本地应用服务器 NFS(采用mount挂载) HDFS(适合大文件) FastDFS(强力推荐

  2. Java——Java代码的执行顺序

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 一.构造方法 构造方 ...

  3. Java——Java是什么一门什么语言

    解释型语言 源代码不能直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行: 程序不需要编译,程序在运行时才翻译成机器语言,每执行一次都要翻译一次: 解释性语言代表:Python ...

  4. 微软关于LINQ的101个例子

    记录,备查. 101 LINQ Sqmples

  5. 01_互联网基本原理和HTML入门

    从"上网"说开去 1.上网就是请求数据 老师现在进行一个互联网原理的整体感知的教学,你注意,整体感知中,一些具体的细节,可能令你没有安全感(很多的知识盲点).没有关系,老师进行的是 ...

  6. 【FreeRTOS实战汇总】小白博主的RTOS学习实战快速进阶之路(持续更新)

    博主是个小白,打算把这段时间系统学习RTOS的文章统一整理到这里,另外本文会给出一些参考性资料和指导性建议: 本文宗旨 FreeRTOS 是由Richard Barry在2003年由设计的,由于其设计 ...

  7. Kubernetes笔记(三):Gitlab+Jenkins Pipeline+Docker+k8s+Helm自动化部署实践(干货分享!)

    通过前面两篇文章,我们已经有了一个"嗷嗷待哺"的K8s集群环境,也对相关的概念与组件有了一个基本了解(前期对概念有个印象即可,因为只有实践了才能对其有深入理解,所谓"纸上 ...

  8. [hdu5348]图上找环,删环

    http://acm.hdu.edu.cn/showproblem.php?pid=5348 题意:给一个无向图,现在要将其变成有向图,使得每一个顶点的|出度-入度|<=1 思路:分为两步,(1 ...

  9. VMware Tanzu已融合云原生与K8s 市场前景尚不确定

    Tanzu是什么? Tanzu 结合了Wavefront IT监控的项目和产品,VMware于2017年5月收购了该软件,并加入了Cloud Foundry PaaS实用工具.VMware在2019年 ...

  10. burpsuite抓包无法识别POST参数问题

    直接拿一道bugkuctf中的题目进行测试 这道题目就是用POST方法上传what=flag 我们利用burpsuite进制抓包 需要更改三个部分,这样就可以解决burpsuite无法识别POST参数 ...