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. 洛谷P1771 方程的解

    P1771 方程的解 都知道这个题可以用隔板法做 把这个\(g(x)\)想象为.....\(g(x)\)个苹果? 因为解是正整数,所以给这些"苹果"分组的时候每组最少有一个 然后我 ...

  2. css属性、样式、边框、选择器

    CSS 层叠样式表 (Cascading Style Sheets,缩写为 CSS),是一种 样式表 语言, 用来描述 HTML或 XML(包括如 SVG.MathML.XHTML 之类的 XML 分 ...

  3. js数组中返回具有某个属性具有特定值的对象

    const drDataArr = [{ date: 0, type: '心率', value: 82 },{ date: 1, type: '心率', value: 80 },{ date: 2, ...

  4. webpack 和 webpack-cli 安装和使用中出现的问题

    因为国内防火墙的原因,建议首先安装 cnpm: 使用 npm install cnpm -g 或者 npm install -g cnpm --registry=https://registry.np ...

  5. 【Hadoop离线基础总结】Sqoop数据迁移

    目录 Sqoop介绍 概述 版本 Sqoop安装及使用 Sqoop安装 Sqoop数据导入 导入关系表到Hive已有表中 导入关系表到Hive(自动创建Hive表) 将关系表子集导入到HDFS中 sq ...

  6. 【matlab 基础篇 01】快速开始第一个程序(详细图文+文末资源)

    快速入门matlab,系统地整理一遍,如何你和我一样是一个新手,那么此文很适合你: 文章目录 1 软件安装 2 打开软件 3 编写程序 3.1 基础步骤 3.2 添加PATH 3.3 命令行模式 4 ...

  7. js代码中引入其他js文件

    /***引入 js 文件 @example: import('js/aui.picker.js') @example: import(['js/aui.picker.js', 'css/aui.pic ...

  8. JS的数据类型判断函数、数组对象结构处理、日期转换函数,浏览器类型判断函数合集

    工具地址:https://github.com/BothEyes1993/bes-jstools bes-jstools 100多个基础常用JS函数和各种数据转换处理集合大全,此工具包是在 outil ...

  9. Android 开发技术周报 Issue#280

    新闻 6分钟完整视频提前看光谷歌新机Pixel 4a 统一推送官方解读:消灭Android毒瘤.待机续航猛增43% Google Play细化搜索结果:可按评分.编辑推荐.最新上线过滤 教程 了解一下 ...

  10. 如何搭建一个WEB服务器项目(二)—— 对数据库表进行基本的增删改查操作

    使用HibernateTemplate进行增删改查操作 观前提示:本系列文章有关服务器以及后端程序这些概念,我写的全是自己的理解,并不一定正确,希望不要误人子弟.欢迎各位大佬来评论区提出问题或者是指出 ...