原题链接:蓝桥杯2013年第四届真题-大臣的旅费
树的直径
参考代码:
#include<bits/stdc++.h>
typedef long long LL;
using namespace std;
const int SIZE = 5E4;
vector<pair<int, int> > vec[SIZE];
bool Vis[SIZE];
pair<int, int> DFS(int now) {
Vis[now] = 1;
pair<int, int> nowpos = make_pair(now, 0);
for (int pos = 0; pos < vec[now].size(); pos++) {
pair<int, int> next = vec[now][pos];
if (Vis[next.first])
continue;
pair<int, int> tmp = DFS(next.first);
if (next.second + tmp.second > nowpos.second) {
nowpos = tmp;
nowpos.second += next.second;
}
}
return nowpos;
}
int spend(int dis) {
return (11 + 10 + dis) * dis / 2;
}
int main() {
int form, to, w, total;
scanf("%d", &total);
for (int pos = 1; pos < total; pos++) {
scanf("%d%d%d", &form, &to, &w);
vec[form].push_back(make_pair(to, w));
vec[to].push_back(make_pair(form, w));
}
pair<int, int> tmp = DFS(1);
memset(Vis, false, sizeof(Vis));
printf("%d\n", spend(DFS(tmp.first).second));
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复