题目:http://115.28.138.223/view.page?gpid=T24

题意就是让求树上的任意两个节点间的距离的最大值。就是树的直径。

首先树的直径模板转载自http://www.07net01.com/2015/08/908766.html

模板思路是先任意确定一个点a,加入到队列当中。然后对这个点用广搜找到和它距离最远的点b。然后用相同的方法对点b找距离它最远的点。这个距离就是要求的直径。

实现:因为求树的直径题目数据量往往比较大,所以用邻接表来储存数据;至于对两个端点的查找通过bfs实现,先将第一次选择的起点a队。 然后开始搜索与a连接的所有边,并将权值存入dis[]数组 dis[x]=dis[top]+edge[i].w(dis[x]指的是当前搜索到的点 与之前与它相连的搜索过边的总权值,dis[top]是指当前搜索到的点的之前与它相连的搜索过边的总权值,edge[i].w是点top到当前搜索到的点 的连线的权值)完成于对当前点的搜索后,将其入队,然后对下 一个点进行此操作,每次搜索时,同时将最大的权值存入sum中如此重复直至队列为空,这样这个搜素结束后,sum的值就是a点到距离其最远的点b的总权值之和;此时再以b为起点进行第二次搜索(第 二次搜 索步骤与第一次相同)

其实就是简单的邻接表应用。只是在下不太熟。于是,觉得很机智。。。。。

#include<stdio.h>
#include<iostream>
#include<string.h>
#define maxn 10010
using namespace std; int head[maxn*];
int vis[maxn*]; // 判断每个节点是否已经被访问过。
int dis[maxn*]; //存储每个节点到当前节点的路径长
int que[maxn*];
int edgeNum;
int n, m;
int ans;
int sum; struct Edge {
int v, c, nxt;
}edge[maxn*]; // T_T哭晕...居然三倍的会TLE...TLE... void addEdge(int a, int b, int c) {
edge[edgeNum].v = b;
edge[edgeNum].c = c;
edge[edgeNum].nxt = head[a];
head[a] = edgeNum++;
} void getMap() {
edgeNum = ;
memset(head, -, sizeof(head));
for (int i=; i<=n; ++i) {
int temp;
scanf("%d", &temp);
addEdge(temp, i, );
addEdge(i, temp, );
}
for (int i=; i<=m; ++i) {
int temp;
scanf("%d", &temp);
addEdge(temp, i+n, );
addEdge(i+n, temp, );
}
} void bfs(int num) {
memset(vis, , sizeof(vis));
memset(dis, , sizeof(dis));
ans = num;
sum = ;
int front = -, rear = ;
que[++front] = num;
while(front >= rear) {
int top = que[front--];
for (int i=head[top]; i!=-; i=edge[i].nxt) {
int v = edge[i].v;
if (!vis[v]) {
dis[v] = dis[top] + edge[i].c;
vis[v] = ;
que[++front] = v;
if (sum < dis[v]) {
sum = dis[v];
ans = v;
}
}
}
}
} int main() {
while(~scanf("%d%d", &n, &m)) {
getMap();
bfs();
bfs(ans);
printf("%d\n", sum);
}
return ;
}

还有某大神做的一种,转载自:http://www.cnblogs.com/hate13/p/4643573.html

用DP。求出每个点的和所有点之间的距离的最大值和第二大值。然后它们的和的最大值就是树的直径。

初始化父亲节点的两个距离都是0。然后如果子节点最大值+1大于父亲节点的最大值。更新父亲节点的两个值。否则如果子节点最大值+1大于父亲节点的第二大值。那么只更新第二大值就可以了。

更机智。有木有。。(⊙o⊙)…额。。还是在下水平低。。

#include<stdio.h>
#include<iostream>
#include<string.h>
#define maxn 10010
using namespace std; int head[maxn*];
int n, m;
int dp[maxn*][];
int edgeNum; struct Edge {
int v,nxt;
}edge[maxn*]; // T_T哭晕...居然三倍的会TLE...TLE... void addEdge(int a, int b) {
edge[edgeNum].v = b;
edge[edgeNum].nxt = head[a];
head[a] = edgeNum++;
} void getMap() {
edgeNum = ;
memset(head, -, sizeof(head));
for (int i=; i<=n; ++i) {
int temp;
scanf("%d", &temp);
addEdge(temp, i);
//addEdge(i, temp, 1);
}
for (int i=; i<=m; ++i) {
int temp;
scanf("%d", &temp);
addEdge(temp, i+n);
//addEdge(i+n, temp, 1);
}
} void dfs(int u) {
dp[u][] = dp[u][] = ;
for (int i=head[u]; i!=-; i=edge[i].nxt) {
int v = edge[i].v;
dfs(v);
if (dp[v][]+ >= dp[u][]) {
dp[u][] = dp[u][];
dp[u][] = dp[v][]+;
}
else if (dp[v][]+ > dp[u][]) {
dp[u][] = dp[v][]+;
}
}
} int main() {
while(~scanf("%d%d", &n, &m)) {
getMap();
dfs();
int sum = ;
for (int i=; i<=n+m; ++i) {
int temp = dp[i][] + dp[i][];
sum = max(temp, sum);
}
printf("%d\n", sum);
}
return ;
}

CCF 2015-03-4 网络延时的更多相关文章

  1. CCF真题之网络延时

    201503-4 问题描述 给定一个公司的网络,由n台交换机和m台终端电脑组成,交换机与交换机.交换机与电脑之间使用网络连接.交换机按层级设置,编号为1的交换机为根交换机,层级为1.其他的交换机都连接 ...

  2. CCF CSP 201503-4 网络延时

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201503-4 网络延时 问题描述 给定一个公司的网络,由n台交换机和m台终端电脑组成,交换机 ...

  3. [ccf 4] 网络延时

    网络延时 问题描述 给定一个公司的网络,由n台交换机和m台终端电脑组成,交换机与交换机.交换机与电脑之间使用网络连接.交换机按层级设置,编号为1的交换机为根交换机,层级为      1.他的交换机都连 ...

  4. 2015年p2p网络借贷平台的发展现状

    2015年春暖花开,莺飞草长,股市大涨大跌起起落落,P2P网络借贷收到越来越多的人关注,P2P网络借贷平台是p2p借贷与网络借贷相结合的金 融服务网站,这么多P2P网络借贷平台排我们应该如何选择呢?小 ...

  5. iOS 学习笔记 六 (2015.03.28)常见错误

    2015.03.28 1. property's synthesized getter follows Cocoa naming convention for returning 'owned' ob ...

  6. Contest2071 - 湖南多校对抗赛(2015.03.28)

    Contest2071 - 湖南多校对抗赛(2015.03.28) 本次比赛试题由湖南大学ACM校队原创 http://acm.csu.edu.cn/OnlineJudge/contest.php?c ...

  7. CCF CSP 201709-4 通信网络

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-4 通信网络 问题描述 某国的军队由N个部门组成,为了提高安全性,部门之间建立了M ...

  8. CCF CSP 201403-4 无线网络

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-4 无线网络 问题描述 目前在一个很大的平面房间里有 n 个无线路由器,每个无线路 ...

  9. TCP协议之网络延时

    影响TCP 网络时延的因素硬件速度网络和服务器的负载请求和响应报文的尺寸客户端和服务器之间的距离TCP 协议的技术复杂性TCP协议产生的时延TCP 连接建立握手:TCP 慢启动拥塞控制:数据聚集的 N ...

随机推荐

  1. 微信小程序——3、逻辑js文件

    逻辑层js文件 微信小程序前端进行了层次划分,分为逻辑层和视图层.逻辑层实现对数据的加工和处理.与HTML页面相似,逻辑层使用JavaScript编写.逻辑层将数据处理后发送至视图层,同时接受视图层的 ...

  2. CSS实现三角形、梯形、平行四边形、圆形、椭圆形、对话框、自适应正方形

    本文篇幅较长,希望能坚持看完,转载请注明出处,如果觉得好文请给个赞吧 CSS实现梯形 CSS实现三角形和梯形主要是依靠border是梯形的特性来做的,有点像相框的那种感觉. 首先我们先给一个正方形设置 ...

  3. sql逻辑查询语句的执行顺序

    SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN ...

  4. ubuntu下安装mkfs.jffs工具

    一.环境 Os: ubuntu 16.04 二.安装 2.1安装依赖库 sudo apt install zlib1g-dev liblzo2-dev uuid-dev 2.2编译安装mtd-util ...

  5. 牌型种数|2015年蓝桥杯B组题解析第七题-fishers

    牌型种数 小明被劫持到X赌城,被迫与其他3人玩牌. 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张. 这时,小明脑子里突然冒出一个问题: 如果不考虑花色,只考虑点数,也不考虑自己得 ...

  6. [BZOJ1060][ZJOI2007]时态同步 树形dp

    Description 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数 字1,2,3….进行标号.电路板的各个节点由若干不相交的导线相连接,且对于电路 ...

  7. 论文笔记——PRUNING FILTERS FOR EFFICIENT CONVNETS

    论文地址:https://arxiv.org/abs/1608.08710 主要思想 这篇文章主要讲了对filters的裁剪,裁剪方法是计算L1范数,然后裁剪掉较少的,多少取决于加速比. 实现效果 V ...

  8. javaweb项目运行时生成的Servers项目作用

    在javaweb项目中,看到有一个Servers的项目,发现每新增一个项目,就会在Servers项目中新生成一些对应的项目文件. 如图所示: 每个项目都有对应的文件.文件的结构图如下: 解释一:Ser ...

  9. 机器学习-数据可视化神器matplotlib学习之路(五)

    这次准备做一下pandas在画图中的应用,要做数据分析的话这个更为实用,本次要用到的数据是pthon机器学习库sklearn中一组叫iris花的数据,里面组要有4个特征,分别是萼片长度.萼片宽度.花瓣 ...

  10. python 字符串输出转义{}

    >>> print ("{} 对应的位置是 {{0}}".format("runoob")) runoob 对应的位置是 {}