3522: [Poi2014]Hotel( 树形dp )

枚举中点x( 即选出的三个点 a , b , c 满足 dist( x , a ) = dist( x , b ) = dist( x , c ) ) , 然后以 x 为 root 做 dfs , 显然两个位于 x 的同一颗子树内的点是不可能被同时选到的 . 我们对 x 的每一颗子树进行 dfs , 记录下当前子树中的点到 x 距离为 d ( 1 <= d <= n ) 有多少个 , 记为 cnt[ 0 ][ i ] . 然后 cnt[ 1 ][ i ] 记录之前 dfs 过的子树的 cnt[ 0 ][ i ] 之和 , cnt[ 2 ][ i ] 记录之前 dfs 过的子树中任意两颗不同子树中的cnt[ 0 ][ i ] * cnt[ 0 ][ i ] 之和 . cnt[  ][ i ] 的计算看代码

----------------------------------------------------------------------------

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iostream>
#define clr( x , c ) memset( x , c , sizeof( x ) )
#define rep( i , n ) for( int i = 0 ; i < n ; ++i )
#define REP( x ) for( edge* e = head[ x ] ; e ; e = e -> next )
using namespace std;
typedef long long ll;
const int maxn = 5000 + 5;
ll cnt[ 3 ][ maxn ];
int n;
struct edge {
int to;
edge* next;
} E[ maxn << 1 ] , *pt = E , *head[ maxn ];
inline void add_edge( int u , int v ) {
pt -> to = v;
pt -> next = head[ u ];
head[ u ] = pt++;
pt -> to = u;
pt -> next = head[ v ];
head[ v ] = pt++;
}
int dfs( int x , int fa , int d ) {
cnt[ 0 ][ d++ ]++;
REP( x ) if( e -> to != fa ) 
   dfs( e -> to , x , d );
}
void work() {
ll ans = 0;
rep( i , n ) {
clr( cnt[ 1 ] , 0 );
clr( cnt[ 2 ] , 0 );
REP( i ) {
clr( cnt[ 0 ] , 0 );
dfs( e -> to , i , 1 );
rep( i , n ) {
ans += cnt[ 0 ][ i ] * cnt[ 2 ][ i ];
cnt[ 2 ][ i ] += cnt[ 0 ][ i ] * cnt[ 1 ][ i ];
cnt[ 1 ][ i ] += cnt[ 0 ][ i ];
}
}
}
printf( "%lld\n" , ans );
}
void init() {
clr( head , 0 );
cin >> n;
rep( i , n - 1 ) {
int u , v , d;
scanf( "%d%d" , &u , &v );
add_edge( --u , --v );
}
}
int main() {
freopen( "test.in" , "r" , stdin );
init();
work();
    return 0; 

  

---------------------------------------------------------------------------- 

3522: [Poi2014]Hotel

Time Limit: 20 Sec  Memory Limit: 128 MB
Submit: 273  Solved: 132
[Submit][Status][Discuss]

Description

有一个树形结构的宾馆,n个房间,n-1条无向边,每条边的长度相同,任意两个房间可以相互到达。吉丽要给他的三个妹子各开(一个)房(间)。三个妹子住的房间要互不相同(否则要打起来了),为了让吉丽满意,你需要让三个房间两两距离相同。
有多少种方案能让吉丽满意?

Input

第一行一个数n。
接下来n-1行,每行两个数x,y,表示x和y之间有一条边相连。

Output

让吉丽满意的方案数。

Sample Input

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

Sample Output

5

HINT

【样例解释】

{1,3,5},{2,4,6},{2,4,7},{2,6,7},{4,6,7}




【数据范围】

n≤5000

Source

By Dzy

 

转载于:https://www.cnblogs.com/JSZX11556/p/4643812.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374800.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一冲刺阶段工作总结02

1.昨天&#xff1a; 实验简单的安卓程序&#xff0c;开始具体的设计软件界面。 2.今天&#xff1a; 继续设计软件页面&#xff0c;由于安卓虚拟机过于迟缓&#xff0c;配置真机&#xff0c;学习如何在真机上运行程序。 3.遇到的困难&#xff1a; 真机配置不知道怎样配置&#x…

JBoss 4.2.x Spring 3 JPA Hibernate教程第2部分

我们将继续有关Spring 3 &#xff0c; Hibernate &#xff0c; JPA和JBoss 4.2.x – 4.3集成的教程 。 最后一步是创建一个Spring服务&#xff0c;以向最终用户公开功能。 我们必须创建一个接口类和相关的实现类。 首先是接口类&#xff1a; package com.mycomp.myproject.se…

洛谷P1035 [NOIP2002 普及组] 级数求和

代码 import java.util.Scanner;public class Main {public static void main(String args[]){Scanner sc new Scanner(System.in);int k sc.nextInt();int n 0;double Sn 0;while(Sn<k){n;Sn Sn 1.0/n;}System.out.println(n);} }这样写while循环体这需要每次加上1/…

『Luogu OJ』『C++』Level 1-1

关卡1-1&#xff0c;3道题 洛谷的第一个任务 任务说明&#xff1a;勇敢的迈出第一步&#xff0c;了解下语言和洛谷。跟着书本和老师走&#xff0c;不会难的。 要完成这个任务&#xff0c;请将以下的题目都AC掉&#xff08;即通过这道题目&#xff09;&#xff1a; 1.AB Problem…

Java中的Google ClientLogin实用程序

Google API的身份验证和授权是当今需要与Google服务集成和信息交换的应用程序中的常见功能。 尽管大多数Google身份验证过程是针对Web应用程序量身定制的&#xff0c;但它也可用于桌面和已安装的应用程序。 对于桌面应用程序&#xff0c;Google建议使用称为ClientLogin的身份验…

九度OJ1486 /POJ 1029/2012北京大学研究生复试上机

wa到死&#xff01;wa到死&#xff01;这是一个看着简单&#xff0c;坑及其多的题&#xff01; 坑一&#xff1a;POJ上是单组输入&#xff0c;九度上是多组输入&#xff0c;妈蛋要是研究生复试遇到这种大坑肯定死掉啊&#xff01;而且对于codeforces比较习惯的 同学肯定会觉得巨…

P1046 [NOIP2005 普及组] 陶陶摘苹果

题目描述 陶陶家的院子里有一棵苹果树&#xff0c;每到秋天树上就会结出 1010 个苹果。苹果成熟的时候&#xff0c;陶陶就会跑去摘苹果。陶陶有个 3030 厘米高的板凳&#xff0c;当她不能直接用手摘到苹果的时候&#xff0c;就会踩到板凳上再试试。 现在已知 1010 个苹果到地面…

新手不了解Xcode和mac系统可能犯得错误和我的建议

我是学iOS刚入门的新手&#xff0c;本人装的时黑苹果&#xff0c;我是喜欢完美的人&#xff0c;但黑苹果又是不完美的系统&#xff0c;比如关不了机啊&#xff0c;和显卡驱动不了啊&#xff0c;当自己的电脑出现白屏和卡顿的时候气的没脾气。我是一个新手。开始学的时java但我喜…

改善Java应用程序性能的快速技巧

曾经遇到过性能问题吗&#xff1f; 我也是。 如果我的经理再喊一次“ faaaaster”&#xff0c;我一生都会有听力障碍。 顺便说一句&#xff0c;我能听到所有声音中的德语发音吗&#xff1f; ;-) 您可以相信仍然有人无知地在谈论垃圾收集器&#xff08;得到它吗&#xff1f;&…

P1047 [NOIP2005 普及组] 校门外的树

某校大门外长度为 ll 的马路上有一排树&#xff0c;每两棵相邻的树之间的间隔都是 11 米。我们可以把马路看成一个数轴&#xff0c;马路的一端在数轴 00 的位置&#xff0c;另一端在 ll 的位置&#xff1b;数轴上的每个整数点&#xff0c;即 0,1,2,\dots,l0,1,2,…,l&#xff0…

团队开发——个人工作总结04

昨天对要用到的SQL语句进行了研究&#xff0c;分别得到了以下结果&#xff1a; 1.这段语句是为用户登录服务的&#xff0c;通过JSP的到的用户名username和密码passdword作为条件查询数据库&#xff0c;如果有查询结果&#xff0c;则返回true select * from [login] where usern…

Nginx的几种常见的几种启动方式

1.默认方式启动 直接执行Nginx的二进制文件即可 /usr/local/nginx/sbin/nginx 这时默认读取配置文件&#xff0c;配置文件目录 /usr/local/nginx/conf/nginx.conf 2.指定配置文件的启动方式 /usr/local/nginx/sbin/nginx -c /tmp/nginx.conf转载于:https://www.cnblogs.com/Leo…

yii2阅读随笔14

继续来看Event.php /*** Triggers a class-level event.* 触发类级别事件。* This method will cause invocation of event handlers that are attached to the named event* for the specified class and all its parent classes.* 触发某个类或者对象的某个事件* param strin…

P1059 [NOIP2006 普及组] 明明的随机数

题目描述 明明想在学校中请一些同学一起做一项问卷调查&#xff0c;为了实验的客观性&#xff0c;他先用计算机生成了N个1到1000之间的随机整数(N≤100)&#xff0c;对于其中重复的数字&#xff0c;只保留一个&#xff0c;把其余相同的数去掉&#xff0c;不同的数对应着不同的学…

基本的EJB参考,注入和查找

在本系列的第一部分中 &#xff0c;我们介绍了Enterprise JavaBeans v。3.0规范提供的机制&#xff0c;用于定义EJB组件&#xff0c;声明对EJB的引用并通过依赖项注入或程序化JNDI查找将它们连接起来。 在此博客文章中&#xff0c;我们将研究一些基本示例以了解如何使用EJB API…

ViewPager使用笔记

1.ViewPager.setCurrentItem(position)&#xff0c;即使已设置动画&#xff0c;但是没有动画效果 原因&#xff1a;因为ViewPager滑动之前的时间间隔太短&#xff0c;可以通过反射&#xff0c;去修改ViewPager自动滑动时间&#xff0c;代码实现如下 1 public class ViewPagerSc…

IOS开发之Swift学习笔记

1.因为存储属性要求初始化&#xff0c;我们可以使用lazy修饰符来延迟初始化。转载于:https://www.cnblogs.com/luntai/p/5430223.html

力扣1两数之和

给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回…

C ++或Java,高频交易哪个更快?

总览 关于什么是高频交易的最佳解决方案&#xff0c;存在不同意见。 问题的一部分是高频交易的变化超出您的预期&#xff0c;另一部分是更快的含义。 我的看法 如果您有一个典型的Java程序员和一个典型的C 程序员&#xff0c;并且每个人都有几年编写典型的面向对象程序的经验…

iOS 8 Xcode6 设置Launch Image 启动图片

本人apem http://www.mamicode.com/info-detail-494411.html 如何设置App的启动图,也就是Launch Image? Step1 1.点击Image.xcassets 进入图片管理,然后右击,弹出"New Launch Image"2.如图,右侧的勾选可以让你选择是否要对ipad,横屏,竖屏,以及低版本的ios系统做支持…