原题链接:蓝桥杯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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复