题目链接:https://vjudge.net/contest/241341#problem/C

Tree Land Kingdom is a prosperous and lively kingdom. It has N cities which are connected to each other by roads such that there is exactly one path to go from one city to any other city. Each road in the kingdom connects exactly two different cities. Every day a lot of merchants travel from one city to other cities in the kingdom making this kingdom famous for its commerce. The king of this kingdom wonders, which city is the busiest one in his entire kingdom. The busyness of a city is defined as the number of merchants who visits this city on each day. A merchant is considered as visiting c city if and only if city c lies on the path when the merchant travels from city a to city b. Unfortunately, we need a lot of resources and time to answer the king’s question. Therefore, the ministers come up with an idea to approximate the answer so they can provide the king with an “early” answer while they are working on the actual answer. To approximate the answer, the ministers modify the definition of a city’s busyness a bit. The busyness of a city a is now defined as the number of different pair of cities a−b such that c lies in a simple path from a to b (note that c is neither a nor c). A path is considered simple if and only if it does not visit any city more than once. Consider the example as shown in Figure 1 below.
In this example, the busyness of city A, B, E and F are 0 because there is no pair of cities which path visits those nodes. The busyness of city C is 7 (the pairs are: A-B, A-D, A-E, A-F, B-D, B-E, B-F) and the busyness of city D is also 7 (the pairs are: A-E, A-F, B-E, B-F, C-E, C-F, E-F). Therefore, the highest busyness in this example is 7, which occurs in city C and D. Given the kingdom’s road structure, your task is to determine the highest busyness among all cities in the kingdom.
Input The first line of input contains an integer T (T ≤ 50) denoting the number of cases. Each case begins with an integer N (3 ≤ N ≤ 20,000) denoting the number of cities in the kingdom. The cities are numbered from 1 to N. The following N −1 lines each contains two integers a and b (1 ≤ a,b ≤ N) denoting a road which connects city a and city b.
Output
For each case, output ‘Case #X: Y ’, where X is the case number starts from 1 and Y is the highest busyness among all cities in the kingdom for that case.
Notes: • Explanation for 1st sample case This sample case corresponds to Figure 1 in the problem statement. • Explanation for 2nd sample case The busiest city is city 2 with busyness of 1 (the pair is: 1-3). • Explanation for 3rd sample case The busiest city is city 2 with busyness of 3 (the pairs are: 1-3, 1-4, 3-4).
Sample Input
4 6 1 3 2 3 3 4 4 5 4 6 3 1 2 2 3 4 1 2 2 3 2 4 7 2 5 1 2 7 4 3 7 2 3 7 6
Sample Output
Case #1: 7 Case #2: 1 Case #3: 3 Case #4: 9

题目大意:输入t,代表t组样例,输入n,接下来有n-1条边,问你一个点被经过的最多次数是多少,如果刚好到该点不算经过,所以叶子节点都算经过0次

个人思路:这道题首先要推出来经过的次数由哪几部分组成:可以把该点看作根,那么就是求它的子树的问题了,该点的次数有两部分组成:

第一部分:该点有n个子树,每个子树的节点数乘以其它子树的总节点数

第二部分:一个子树上的节点之间也有路,所以也要相乘(我这里的算法是多算了一倍,所以要除以2)

看代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<string.h>
#include<cmath>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
#include<map>
typedef long long ll;
using namespace std;
const ll mod=1e9+;
const int maxn=2e4+;
const int maxk=+;
const int maxx=1e4+;
const ll maxe=+;
#define INF 0x3f3f3f3f3f3f
vector<int>p[maxn];
int Po[maxn];
int ans=,n;
void dfs(int now,int pre)
{
for(int i=;i<p[now].size();i++)
{
int v=p[now][i];
if(v!=pre)
{
dfs(v,now);
Po[now]+=Po[v];//该点除了自己和pre有多少个节点
}
}
int sum1=,sum2=;
sum1=Po[now]*(n--Po[now]);//自己集合的节点数*不属于自己集合的节点数(不包括本身)
for(int i=;i<p[now].size();i++)
{
int v=p[now][i];
if(v!=pre)
{
// sum2+=Po[v]*(p[now].size()-Po[v]);
sum2+=Po[v]*(Po[now]-Po[v]);//自己集合的节点之间也会有路径
}
}
sum2=sum2/;//相当于乘了两遍,所以除以2
if(ans<sum1+sum2)
ans=sum1+sum2;
Po[now]++;//加上自己
}
int main()
{
ios::sync_with_stdio(false);
int t;
int sum=;
cin>>t;
while(t--)
{
for(int i=;i<maxn;i++)
p[i].clear();//每次都要清空
ans=;
memset(Po,,sizeof(Po));
int a,b;
cin>>n;
for(int i=;i<n;i++)
{
cin>>a>>b;
p[a].push_back(b);
p[b].push_back(a);
}
dfs(,);//从第一个节点开始遍历(其实任意一个节点都可以)
printf("Case #%d: %d\n",sum++,ans);
}
return ;
}

UVALive - 6436的更多相关文章

  1. UVALive - 6436、HYSBZ - 2435 (dfs)

    这两道题都是用简单dfs解的,主要是熟悉回溯过程就能做,据说用bfs也能做 道路修建(HYSBZ - 2435) 在 W 星球上有n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道 ...

  2. UVALive - 6436(DFS)

    题目链接:https://vjudge.net/contest/241341#problem/C 题目大意:给你从1到n总共n个数字,同时给你n-1个连接,同时保证任意两个点之间都可以连接.现在假设任 ...

  3. UVALive - 6436 —(DFS+思维)

    题意:n个点连成的生成树(n个点,n-1条边,点与点之间都连通),如果某个点在两点之间的路径上,那这个点的繁荣度就+1,问你在所有点中,最大繁荣度是多少?就比如上面的图中的C点,在A-B,A-D,A- ...

  4. UESTC 2016 Summer Training #6 Div.2

    我好菜啊.. UVALive 6434 给出 n 个数,分成m组,每组的价值为最大值减去最小值,每组至少有1个,如果这一组只有一个数的话,价值为0 问 最小的价值是多少 dp[i][j] 表示将 前 ...

  5. UVALive - 4108 SKYLINE[线段树]

    UVALive - 4108 SKYLINE Time Limit: 3000MS     64bit IO Format: %lld & %llu Submit Status uDebug ...

  6. UVALive - 3942 Remember the Word[树状数组]

    UVALive - 3942 Remember the Word A potentiometer, or potmeter for short, is an electronic device wit ...

  7. UVALive - 3942 Remember the Word[Trie DP]

    UVALive - 3942 Remember the Word Neal is very curious about combinatorial problems, and now here com ...

  8. 思维 UVALive 3708 Graveyard

    题目传送门 /* 题意:本来有n个雕塑,等间距的分布在圆周上,现在多了m个雕塑,问一共要移动多少距离: 思维题:认为一个雕塑不动,视为坐标0,其他点向最近的点移动,四舍五入判断,比例最后乘会10000 ...

  9. UVALive 6145 Version Controlled IDE(可持久化treap、rope)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

随机推荐

  1. web攻击之四:DOS攻击

    DDOS是DOS攻击中的一种方法. DoS:是Denial of Service的简称,即拒绝服务,不是DOS操作系统,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务. ...

  2. java基础知识(10)---包

    包:定义包用package关键字. 1:对类文件进行分类管理. 2:给类文件提供多层名称空间. 如果生成的包不在当前目录下,需要最好执行classpath,将包所在父目录定义到classpath变量中 ...

  3. TS学习之函数

    定义函数类型(规定函数参数及函数返回值的类型,若函数没有返回值,则返回类型为null) function add(x: number, y: number): number { return x + ...

  4. python超大数计算

    In [26]: %time a = 6789**100000CPU times: user 0 ns, sys: 0 ns, total: 0 nsWall time: 6.2 µsIn [27]: ...

  5. go 语言 基础 类型(1)

    变量 使用关键字 var定义变量,自动初始化为0值.如果提供初始化值,可省略变量类型,由编译器自动推断. 在函数内部可以使用 := 方式定义变量 func main() { x := 123 } 可一 ...

  6. Improving Deep Neural Networks 笔记

    1 Practical aspects of Deep Learning 1.1 Train/Dev/Test sets 在小样本的机器学习中,可以分为60/20/20. 在大数据训练中,不需要划分很 ...

  7. 错误:Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web

    在eclipse的workspace里面找到该项目. 依次进入:.settings->org.eclipse.wst.common.project.facet.core.xml. 打开文件后,将 ...

  8. CSS样式基础:

    CSS:外部文件导入  <link rel="stylesheet" type="text/css" href="./style.css&quo ...

  9. 8. CTF综合靶机渗透(一)

    靶机说明 虚拟机难度中等,使用ubuntu(32位),其他软件包有: PHP apache MySQL 目标 Boot to root:从Web应用程序进入虚拟机,并获得root权限. 运行环境 靶机 ...

  10. AngularJs详细

    正经的来啦 (MVC) View(视图), 即 HTML. Model(模型), 当前视图中可用的数据. Controller(控制器), 即 JavaScript 函数,可以添加或修改属性. 修改了 ...