1207. 大臣的旅费(dfs求树的直径/图论)

题目:

1207. 大臣的旅费 - AcWing题库

思路: 

dfs求树的直径。 

 

代码:

#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
const int N=100100;
struct Edge//边的id以及长度
{
    int id,w;
};

vector<Edge>Node[N];//存储结点Node[i]相连的所以边另一端的结点编号以及边的长度
int dist[N];//距离起始结点的距离

void dfs(int u,int father,int distance)
{
    dist[u]=distance;
    for(auto node:Node[u])//遍历当前结点的所以关联结点
        if(node.id!=father)//不重复
            dfs(node.id,u,distance+node.w);
}
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n-1;i++)
    {
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        Node[a].push_back({b,c});
        Node[b].push_back({a,c});
    }
    
     int u=1;//以结点1为起点
    dfs(1,-1,0);//找到距离结点1最远的结点
    for(int i=1;i<=n;i++)
        if(dist[i]>dist[u])
            u=i;//距离结点1最远的结点编号为u
            
    dfs(u,-1,0);//以结点u为起点,找到距离结点u的最远的结点u
    for(int i=1;i<=n;i++)
        if(dist[i]>dist[u])
            u=i;//距离结点最远的结点编号为u
            
    int s=dist[u];
    printf("%lld",s*10+(1ll+s)*s/2);
}

 

相关推荐

  1. 1207. 大臣旅费

    2024-01-06 08:24:02       14 阅读
  2. 直径

    2024-01-06 08:24:02       32 阅读
  3. 直径(树形DP、BFS)

    2024-01-06 08:24:02       17 阅读
  4. 2024-01-06 08:24:02       28 阅读
  5. 重心

    2024-01-06 08:24:02       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-06 08:24:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-06 08:24:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-06 08:24:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-06 08:24:02       20 阅读

热门阅读

  1. CSS 使用技巧

    2024-01-06 08:24:02       40 阅读
  2. Go语言程序设计-第7章--接口

    2024-01-06 08:24:02       29 阅读
  3. 机器学习的三个方面

    2024-01-06 08:24:02       39 阅读
  4. 【华为OD真题 Python】日志采集系统

    2024-01-06 08:24:02       41 阅读
  5. AUTOSAR从入门到精通-漫谈autosar软件架构(七)

    2024-01-06 08:24:02       45 阅读