博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Spfa/最短路模板】遍历所有点的最短路径
阅读量:4983 次
发布时间:2019-06-12

本文共 1748 字,大约阅读时间需要 5 分钟。

题目描述

明明暑假来济南旅游旅游,他打算游玩N个旅游景点,N-1条双向连接的道路将它们联通起来,每一条道路有固定长度。一开始明明位于1号景点。
现在希望你能够求出旅行长度最小的方案,使得每个景点至少被访问到一次。
 

 

输入

第一行两个整数N,代表景点数目。
接下来N-1行,每行三个整数s, t, w,表示有一条从s到t的双向道路,长度为w。s和t的编号从1开始。

 

输出

一行一个整数,代表能够访问每个景点至少一次的方案的最小旅行长度。
 
#include
#define ll long longusing namespace std;const int INF=0x3f3f3f3f;const int maxn=50005;struct Edge{ int v; int cost; Edge(int _v=0,int _cost=0):v(_v),cost(_cost){}};vector
E[maxn];void addedge(int u,int v,int w){ E[u].push_back(Edge(v,w));}bool vis[maxn];int cnt[maxn];int dist[maxn];bool spfa(int st,int n){ memset(vis,false,sizeof vis); for(int i=1;i<=n;i++) dist[i]=INF; vis[st]=true; dist[st]=0; queue
qu; while(!qu.empty()) { qu.pop(); } qu.push(st); memset(cnt,0,sizeof cnt); cnt[st]=1; while(!qu.empty()) { int u=qu.front(); qu.pop(); vis[u]=false; for(int i=0;i
dist[u]+E[u][i].cost) { dist[v]=dist[u]+E[u][i].cost; if(!vis[v]) { vis[v]=true; qu.push(v); if(++cnt[v]>n) return false; } } } } return true;}int vis0[50005];int main(){ int n; scanf("%d",&n); int u, v, w; int ant=0,mx=0; for (int i = 1; i <= n-1; i++) { scanf("%d %d %d",&u,&v,&w); ant+=w; addedge(u,v,w); addedge(v,u,w); vis0[u]=0; vis0[v]=1; } ant*=2; spfa(1,n); for(int i=1;i<=n;i++) { mx=max(mx,dist[i]); } printf("%d\n",ant-mx); return 0;}

 

转载于:https://www.cnblogs.com/Diliiiii/p/10305755.html

你可能感兴趣的文章
Django电商项目---完成商品主页显示day2
查看>>
如何解决文章格式化编辑器win7 64位下找不到Comctl32.ocx
查看>>
核心动画-翻页效果的实现
查看>>
微信小程序弹出框 页面依然可以滑动的解决
查看>>
$.ajax同域请求,跨域请求的解决方案
查看>>
octave操作
查看>>
【Python】安装Python的mysql模块
查看>>
【Python】在控制台输出不同颜色的文字
查看>>
js 获取gridview 点击行每个单元格的值
查看>>
Floyd算法解说
查看>>
浅谈C++非多态单继承数据布局
查看>>
cogs 1396. wwww
查看>>
MYSQL数据库优化
查看>>
Linux 新手学习任务
查看>>
内部类对象的获取!《Thinking in Java》随笔018
查看>>
[MongoDB]Python 操作 MongoDB
查看>>
antd 表格隔行变色
查看>>
springboot-helloworld实现
查看>>
关于CocoaSocket
查看>>
面试准备专题——SOA架构
查看>>