记录编号 |
300963 |
评测结果 |
AAAAAAAAAA |
题目名称 |
KZ菌的星际旅行 |
最终得分 |
100 |
用户昵称 |
kito |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.818 s |
提交时间 |
2016-08-29 16:35:39 |
内存使用 |
89.54 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define fcl fclose(stdin); fclose(stdout); return 0
struct ss{
int to,next,nazi;
}edge[2000010];
int head[10000010]={0},tot=0;
inline void AddEdge(const int& a,const int& b,const int& c){
edge[++tot].to=b;
edge[tot].nazi=c;
edge[tot].next=head[a];
head[a]=tot;
}
int n,m;
int dis[10000010];
struct sss{
int id,dis;
sss(const int& a,const int& b){
id=a; dis=b;
}
bool operator < (const sss& a) const{
return dis>a.dis;
}
}v(0,0);
priority_queue<sss> Que;
void Dijs(){
memset(dis,0x7f,sizeof(dis));
dis[1]=0;
Que.push(sss(1,0));
int x,y;
while(!Que.empty()){
v=Que.top();
Que.pop();
if(v.dis!=dis[v.id]) continue;
x=head[v.id];
while(x){
y=edge[x].to;
if(dis[y]>v.dis+edge[x].nazi){
dis[y]=v.dis+edge[x].nazi;
Que.push(sss(y,dis[y]));
}
x=edge[x].next;
}
}
}
int main(){
freopen("KZstartravelillu.in","r",stdin);
freopen("KZstartravelillu.out","w",stdout);
scanf("%d%d",&n,&m);
int a,b,c;
for(int i=1;i<=m;++i){
scanf("%d%d%d",&a,&b,&c);
AddEdge(a,b,c);
AddEdge(b,a,c);
}
Dijs();
dis[n]<<=1;
printf("%d",dis[n]);
fcl;
}
//end