zoukankan      html  css  js  c++  java
  • B

    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. 
    有n个农田和m条路,以及每条路的方向(方向在这道题中没有用),求最长的一条路,也就是两点间的最大距离,即树的直径.

    Input

    * Line 1: Two space-separated integers: N and M
    

    * Lines 2..M+1: Each line contains four space-separated entities, F1,
    F2, L, and D that describe a road. F1 and F2 are numbers of
    two farms connected by a road, L is its length, and D is a
    character that is either 'N', 'E', 'S', or 'W' giving the
    direction of the road from F1 to F2.

    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

    题目大意:从点A到点B的距离是C,有N个点,M条线,问两点之间最远的距离;
    思路:
    首先按要存图,一开开始是用的数组,一直RE后来才发现数的范围是1E5,二维数组直接就蹦了,所以要用Vector存图,输入的时候也要用c语言的常规输入输出,不然会TLE

    #include<iostream>
    #include<cstdio>
    #include<vector>
    #include<cstring>
    using namespace std;
    int n,m;//m个农场,6条路径 
    struct stu{
        int a,b;//保存点2和点1 到点2点距离
    }e;
    
    vector<stu >arr[100100];
    int mark[100010];//标记数组
    int ans=0;
    int xx;
    
    void dfs(int x,int step){
        if(step>ans){
            ans=step;
            xx=x;
        }
        for(int i=0;i<arr[x].size();i++){//arr[x]中的点肯定是与x相连接的点
            if(mark[arr[x][i].a]==0){
                mark[arr[x][i].a]=1;
                dfs(arr[x][i].a,step+arr[x][i].b);
                mark[arr[x][i].a]=0;
            }
        }
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        int x,y,z;
        char s;
        memset(arr,0,sizeof(arr));
        for(int i=0;i<m;i++){
    //        scanf("%d%d%d %c
    ",&x,&y,&z);
    //        cin>>x>>y>>z>>s;
            scanf("%d %d %d",&x,&y,&z);
            getchar(), getchar();
    //        getchar();
    //        getchar();getchar();
            arr[x].push_back({y,z});
            arr[y].push_back({x,z});
    //        arr[x][y]=z;
    //        arr[y][x]=z;
            
        }
        
        ans=0;
        memset(mark,0,sizeof(mark));
        mark[1]=1;
        dfs(1,0);
        memset(mark,0,sizeof(mark));
        mark[xx]=1;
        dfs(xx,0);//两轮dfs直接输出
        cout<<ans<<endl;
        return 0;
    }



  • 相关阅读:
    ionic2简单分析
    mvc的真实含义
    JavaSE学习总结(十七)—— IO流
    vs2010快捷键;sql server 2008快捷;IE9快捷键
    设计模式之六大设计原则
    通过peview分析PE文件
    游戏限制多开原理及对应方法
    inline hook原理和实现
    vm tools安装包为空
    Linux下PWN环境搭建
  • 原文地址:https://www.cnblogs.com/Accepting/p/11243635.html
Copyright © 2011-2022 走看看