Cow Marathon
Time Limit: 2000MS   Memory Limit: 30000K
Total Submissions: 4216   Accepted: 2137
Case Time Limit: 1000MS

Description

After hearing about the epidemic of obesity in the USA, Farmer John wants his cows to get more exercise, so he has committed to create a bovine marathon for his cows to run. The marathon route will include a pair of farms and a path comprised of a sequence of roads between them. Since FJ wants the cows to get as much exercise as possible he wants to find the two farms on his map that are the farthest apart from each other (distance being measured in terms of total length of road on the path between the two farms). Help him determine the distances between this farthest pair of farms.

Input

* Lines 1.....: Same input format as "Navigation Nightmare".

Output

* Line 1: An integer giving the distance between the farthest pair of farms.

Sample Input

7 6
1 6 13 E
6 3 9 E
3 5 7 S
4 1 3 N
2 4 20 W
4 7 2 S

Sample Output

52

Hint

The longest marathon runs from farm 2 via roads 4, 1, 6 and 3 to farm 5 and is of length 20+3+13+9+7=52.

Source

本体的大概意思就是求一个树上任意两个点之间的最大距离,本树是一个无向图树,方法并不唯一,
可以用dp解决,也可以用dfs解决,
存储边的时候一定要切记应该是无向图,两边都应该存进去
 利用了树的直径的一个性质:距某个点最远的叶子节点一定是树的某一条直径的端点。这样就可以首先任取一个点,bfs求出离其最远的点,
在用同样的方法求出离这个叶子节点最远的点,此时两点间的距离就是树的直径。
 
    #include<iostream>  
    #include<cstring>  
    #include<cstdio>  
    #include<algorithm>        
    using namespace std;  
    #define MAXN  500000        
    struct edge{  
        int to,dis,next;  
    }e[9999999];        
    int head[MAXN],en;  
    int dis[MAXN];        
    void add(int u,int v ,int w){  
        e[en].to=v;  
        e[en].dis=w;  
        e[en].next=head[u];  
        head[u]=en++;  
    }  
    void dfs(int f,int u,int d){  
        dis[u]=d;  
        for(int i=head[u];i!=-1;i=e[i].next)  
            if(e[i].to!=f)  
                dfs(u,e[i].to,d+e[i].dis);  
    }
    int u,v,c;  
    int n,m;  
    char s[20];  
    int main(){  
        while(~scanf("%d%d",&n,&m)){  
            memset(head,-1,sizeof(head));  
            en=0;  
            for(int i=0;i<m;i++){  
                scanf("%d%d%d%s",&u,&v,&c,s);  
                add(u,v,c);  
                add(v,u,c);  
            }  
            dfs(0,1,0);  
            int maxs,tag;  
            maxs=-1;tag=0;  
            for(int i=1;i<=n;i++){  
                if(maxs<dis[i])  
                {  
                    maxs=dis[i];  
                    tag=i;  
                }  
            }  
            dfs(0,tag,0);  
            maxs=-1;  
            for(int i=1;i<=n;i++)  
                maxs=max(maxs,dis[i]);  
            printf("%d\n",maxs);  
        }  
        return 0;  
    }  
下面的这个题是CCF认证的第四题,
该问题仍然求得是任意两点之间的最大距离,
但是该题并没有给出边的长度,
所以在套用模版的时候可以把边存储为1
另外该题有n+m,边,在进行循环的时候一定要注意该题的界限是m+n
 
姓名:
IJ����  
问题描述
试题编号: 201503-4
试题名称: 网络延时
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
   给定一个公司的网络,由n台交换机和m台终端电脑组成,交换机与交换机、交换机与电脑之间使用网络连接。交换机按层级设置,编号为1的交换机为根交换 机,层级为1。其他的交换机都连接到一台比自己上一层的交换机上,其层级为对应交换机的层级加1。所有的终端电脑都直接连接到交换机上。
  当信息在电脑、交换机之间传递时,每一步只能通过自己传递到自己所连接的另一台电脑或交换机。请问,电脑与电脑之间传递消息、或者电脑与交换机之间传递消息、或者交换机与交换机之间传递消息最多需要多少步。
输入格式
  输入的第一行包含两个整数n, m,分别表示交换机的台数和终端电脑的台数。
  第二行包含n - 1个整数,分别表示第2、3、……、n台交换机所连接的比自己上一层的交换机的编号。第i台交换机所连接的上一层的交换机编号一定比自己的编号小。
  第三行包含m个整数,分别表示第1、2、……、m台终端电脑所连接的交换机的编号。
输出格式
  输出一个整数,表示消息传递最多需要的步数。
样例输入
4 2
1 1 3
2 1
样例输出
4
样例说明
  样例的网络连接模式如下,其中圆圈表示交换机,方框表示电脑:

  其中电脑1与交换机4之间的消息传递花费的时间最长,为4个单位时间。
样例输入
4 4
1 2 2
3 4 4 4
样例输出
4
样例说明
  样例的网络连接模式如下:

  其中电脑1与电脑4之间的消息传递花费的时间最长,为4个单位时间。
评测用例规模与约定
  前30%的评测用例满足:n ≤ 5, m ≤ 5。
  前50%的评测用例满足:n ≤ 20, m ≤ 20。
  前70%的评测用例满足:n ≤ 100, m ≤ 100。
  所有评测用例都满足:1 ≤ n ≤ 10000,1 ≤ m ≤ 10000。
答题栏
试题编号: 201503-4
试题名称: 网络延时
 

poj1985&&第四次CCF软件认证第4题 求树的直径的更多相关文章

  1. 【实(dou)力(bi)首(mai)发(meng)】第四次CCF软件能力认证题解

    这次的题总体上相对前三次偏简单.由于实力有限,就分析前四题.     试题编号:    201503-1 试题名称:    图像旋转 时间限制:    5.0s 内存限制:    256.0MB 问题 ...

  2. 第16次CCF CSP认证-第5题-317 号子任务(subtask317)-图论最短路径

    [题目背景]“你在平原上走着走着,突然迎面遇到一堵墙,这墙向上无限高,向下无限深,向左无限远,向右无限远,这墙是什么?”——<流浪地球>原著我们带着地球去流浪了,为了处理流浪过程中可能会发 ...

  3. poj1985 Cow Marathon (求树的直径)

    Cow Marathon Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 3195   Accepted: 1596 Case ...

  4. [USACO2004][poj1985]Cow Marathon(2次bfs求树的直径)

    http://poj.org/problem?id=1985 题意:就是给你一颗树,求树的直径(即问哪两点之间的距离最长) 分析: 1.树形dp:只要考虑根节点和子节点的关系就可以了 2.两次bfs: ...

  5. CCF CSP认证考试在线评测系统

    关于 CCF CSP 认证考试在线评测系统 CCF CSP 认证考试简介 CCF 是中国计算机学会的简称.CCF 计算机软件能力认证(简称 CCF CSP 认证考试)是 CCF 于 2014 年推出, ...

  6. C#_自动化测试 (四) 自动卸载软件

    在平常的测试工作中,经常要安装软件,卸载软件,  即繁琐又累.  安装和卸载完全可以做成自动化. 安装软件我们可以通过自动化框架,自动点击Next,来自动安装.  卸载软件我们可以通过msiexec命 ...

  7. 系列四TortoiseSvn客户端软件

    原文:系列四TortoiseSvn客户端软件 TortoiseSvn介绍 TortoiseSvn 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录.文件保存在中 ...

  8. CCF CSP 认证

    参加第八次CCF CSP认证记录 代码还不知道对不对,过两天出成绩. 成绩出来了,310分. 100+100+100+10+0: 考试13:27开始,17:30结束,提交第4题后不再答题,只是检查前四 ...

  9. 【生活】记第一次参加CCF CSP认证

    2018年03月18日 CCF CSP认证 三月份的这次csp认证,我之前是没报名的,一来自己还没什么准备,二来去年的那次认证我也没参加,开考前的一个礼拜,从朋友那得知,这次学校团体报名的名额还没报满 ...

随机推荐

  1. SVN合并步骤

    1.trunk->branch/tag 分支路径在分支文件夹中,选择右键检出 2.合并分支到主干分支新增 1.txt 文件 需要合并到主干 在trunck->鼠标右键合并->合并到不 ...

  2. Git项目管理常用命令

    安装Git Bash后,地址:https://git-scm.com/downloads 根据自己的操作系统选择对应是安装方式 可参见码云给出的文档:http://git.mydoc.io/?t=18 ...

  3. BZOJ 3130: [Sdoi2013]费用流 网络流+二分

    3130: [Sdoi2013]费用流 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 1230  Solved: ...

  4. Unity中实现全局管理类的几种方式

    (搬运自我在SegmentFault的博客) 如何在Unity中实现全局管理类?由于Unity脚本的运行机制和面向组件编程(COP)的思想,实现起来和普通的方式略有差别. 第一种方式是使用静态类.适合 ...

  5. [VC]获取本地程序的版本信息信息

    CString CQwerApp::IS_GetAppVersion(char *AppName) { ////需要加上version.lib在link里 CString AppVersion; // ...

  6. EF6.0注意事项

    EF6 1.必须要添加Entitiframework 2.必须要添加必须要添加Entitiframework.Sqlserver 3.单元测试一定要有配置文件里面一定要有连接字符串和初始化配置文件节点 ...

  7. javascript报错:ReferenceError: $ is not defined解决办法

    原因很简单,要么是未导入jquery包,要么是导入的顺序不对. 例如,我在制作Chrome扩展程序时,其中的一块代码如下: 然后运行时报上述错误. 解决方法:我们不难发现script位置有问题,因为$ ...

  8. Forbidden You don't have permission to access /phpStudyTest/application/index/controller/Index.php on this server.

    发生情况:将thinkPHP从官网上下了  http://thinkphp.cn 然后安装了phpstudy和PHPstorm,并将thinkPHP解压到www路径下 在用PHPstorm打开 thi ...

  9. Vue处理ajax请求

    Ajax请求 1>解决跨域问题 1.1前端解决.只需要在vue.config.js中增加devServer节点增加代理: const path = require("path" ...

  10. 【转】VS2010下MFC的串口编程

    串口通信简介 一般来说,计算机都有一个或多个串行端口,这些串口提供了外部设备与PC进行数据传输和通信的通道,在CPU和外设之间充当解释器的角色.当字符数据从CPU发送给外设时,这些字符数据将被转换成串 ...