hdu 4171 最短路
#include<stdio.h>
#include<string.h>
#include<queue>
#include<iostream>
using namespace std;
#define inf 1000000000
#define N 110000
struct node {
int u,v,w,next;
}bian[N*2];
int head[N],yong,mindistance[N],n,visit[N],countt[N];
void addedge(int u,int v,int w) {
bian[yong].u=u;
bian[yong].v=v;
bian[yong].w=w;
bian[yong].next=head[u];
head[u]=yong++;
}
void min_spfa(int cur) {
int i;
for(i=0;i<=n;i++) {
mindistance[i]=inf;
visit[i]=0;
countt[i]=0;//原来在c++中的某些关键字不能乱用比如说count之类
}
visit[cur]=1;
queue<int>q;
q.push(cur);
mindistance[cur]=0;
while(!q.empty()) {
cur=q.front();
q.pop();
for(i=head[cur];i!=-1;i=bian[i].next) {
int v=bian[i].v;
if(mindistance[v]>mindistance[cur]+bian[i].w) {
mindistance[v]=mindistance[cur]+bian[i].w;
if(!visit[v]) {
if(++countt[v]>n)
return ;
visit[v]=1;
q.push(v);
}
}
}
visit[cur]=0;
}
return ;
}
int main() {
int i,a,b,c,dis[N],sum,minsum;
while(scanf("%d",&n)!=EOF) {
yong=0;
memset(head,-1,sizeof(head));
for(i=0;i<=n;i++)
scanf("%d",&dis[i]);
sum=0;
for(i=0;i<n;i++) {
scanf("%d%d%d",&a,&b,&c);
addedge(a,b,c);
addedge(b,a,c);
sum=sum+c*2;
}
min_spfa(0);
minsum=sum+dis[0];
for(i=1;i<=n;i++) {
if(minsum>sum-mindistance[i]+dis[i])
minsum=sum-mindistance[i]+dis[i];
}
printf("%d\n",minsum);
}
return 0;
}
最新文章
- Nexus Repository Manager 3.0 发布
- git撤销命令
- Mongodb shell 基本操作
- Android zxing连续扫描
- 20160506-hibernate入门
- PHP、JSP、.NET各自的真正优势是什么
- iOS View的Frame和bounds之区别,setbounds使用(深入探究)
- hash练习
- angular2 学习笔记 ( Form 表单 )
- 文成小盆友python-num5 -装饰器回顾,模块,字符串格式化
- Vue 项目代理设置的优化
- ●洛谷P2934 [USACO09JAN]安全出行Safe Travel
- python提取网页表格并保存为csv
- Java线程的创建及启动
- linux redis服务安装
- bzoj4948: World Final2017 A
- zabbix 自定义监控 排除带报错提示
- 添加额外的源, 使得yum可以安装更多的软件
- Springmvc Exception
- C# TinyMapper
热门文章
- Datatable转换为Json 的方法
- PCB Winform中的WebBrowser扩展拖放(拖拽)功能 实现方法
- cookie应用(一周内免登陆)
- [Swift通天遁地]五、高级扩展-(7)UIView(视图类型)的各种扩展方法
- 浅析SpringDataJpa继承结构
- mahjong
- ANDROID 开发之 SQLite
- C/C++ Python的函数默认参数
- 无法定位程序输入点_except_handler4_common于动态链接库msvcrt.dll
- CSS3悬浮动画效果