原题链接:蓝桥杯2013年第四届真题-大臣的旅费
解题思路:
#include<cstdio> #include<cstring> #include<queue> #include<algorithm> #define N 10010 #define INT 10000000 using namespace std; int dist[N][N],sum[N],vis[N],n; int start=1,last=-1,maxLength=0; queue<int>q; int cmp(int a,int b){ return a>b; } int max(int a,int b) { return a>b?a:b; } int money(int dist) { int sum = 0; for(int i=1;i<=dist;i++) sum += i+10; return sum; } void BFS(int start) { memset(vis,0,sizeof(vis)); vis[start]=1; while(!q.empty()) q.pop(); q.push(start); while(!q.empty()) { int parent = q.front(); q.pop(); if(sum[parent]>maxLength) { last = parent; maxLength = sum[parent]; } for(int son=1;son<=n;son++) { if(!vis[son] && dist[parent][son]!=0) { vis[son] = true; sum[son] = sum[parent]+dist[parent][son]; q.push(son); } } } } int main(void) { scanf("%d",&n); /* for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) dist[i][j]=INT; */ for(int i=1;i<n;i++) { int begin,End,s; scanf("%d%d%d",&begin,&End,&s); if(dist[begin][End]<s || dist[begin][End]==INT) dist[begin][End]=dist[End][begin]=s; } BFS(start); sum[last]=0; BFS(last); printf("%d\n",money(maxLength)); }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复