题目描述
V8超级喜欢锻炼身体,尤其喜欢爬树,为了抓到更多的虫子,他希望自己从某个叶子节点到根节点的路径最长,现在给你一棵树,输出V8需要的路径长度。
输入
多组数据
第一行一个T表示数据组数
对于之后的每组数据
第一行一个n,表示边数。
后面n行,每一行三个数u,v,w,表示有v是u的儿子,并且之间有一条权为w的边。
1为根节点。
所有数据小于10000.
输出
从根节点到某个叶子的最长路径。
--正文
难点在咋储存这个树。。
试过c的结构体,被free搞的心烦意乱
只好用vector水一下
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cstdlib> #include <vector> using namespace std; typedef long long LL; struct EdgeNode { int next; int weight; }; typedef struct EdgeNode Edge; vector<Edge> Tree[10001]; int dfs(int node){ int i,sum = 0; for (i=0;i<Tree[node].size();i++){ sum = max(sum,dfs(Tree[node][i].next)+Tree[node][i].weight); } return sum; } int main(){ int time,T,i,j; scanf("%d",&T); for (time=1;time<=T;time++){ int n; scanf("%d",&n); for (i=1;i<=n;i++) Tree[i].clear(); for (i=1;i<=n;i++){ int u,v,w; scanf("%d %d %d",&u,&v,&w); Edge l; l.next = v; l.weight = w; Tree[u].push_back(l); } int root; printf("%d\n",dfs(1)); } return 0; }
时间: 2024-12-16 20:43:23