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. 一个poll的简单例子

    该程序使用poll事件机制实现了一个简单的消息回显的功能,其服务器端和客户端的代码如下所示: 服务器端: //start from the very beginning,and to create g ...

  2. Java笔记(day14-17)

    集合类的由来: 对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定. 就使用集合容器进行存储. 集合特点: 1,用于存储对象的容器. 2,集合的长度是可变的. 3,集合中不可以存储基本数据类 ...

  3. P2762 太空飞行计划问题 网络流

    题目描述 W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,…,Em},和进行这些实验需要使用的全部仪器的 ...

  4. 在web项目中使用shiro(记住我功能)

    第一步,添加“记住我”复选框,rememberMe要设置参数 第二步,配置shiro的主配置文件 注意 rememberMeCookie对应的bean中要声明 <constructor-arg ...

  5. java基础篇 之 构造器内部的多态行为

    java基础篇 之 构造器内部的多态行为 ​ 我们来看下下面这段代码: public class Main { public static void main(String[] args) { new ...

  6. Java中Error和Exception的异同以及运行时异常(Runtime exception)与检查型异常(checked exception)的区别

    一:Error和Exception的基本概念: 首先Exception和Error都是继承于Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕 ...

  7. tp5.1 nginx环境下url去掉index.php

    原来的地址http://xxxxxxx/index.php/admin/login/index.html 修改完的路径http://xxxxxxx/admin/login/index.html 修改. ...

  8. chrom浏览器总是将http请求强制转换成https请求

    chrome://net-internals/#hsts 中 Delete domain security policies 输入该站点,将将该站点删除一下就OK. 其他浏览器: Chrome 浏览器 ...

  9. Android Loader使用时,屏幕解锁后,重复加载

    在使用AsyncTaskLoader时,当手机解锁后,会重复加载数据,代码如下: static class CouponShopQueryLoader extends AsyncTaskLoader& ...

  10. jquery 扫码实现入库登记管理

    刚才跟一位分享的大神讲了关于项目中的需求,因为是第一次做这样的需求,还是蒙蒙的,现在把设计图给大家看看,大家有没有做过这样的需求业务,请多多指教!