记录编号 131833 评测结果 AAAAA
题目名称 最难的任务 最终得分 100
用户昵称 Gravatar高哥 是否通过 通过
代码语言 C++ 运行时间 0.072 s
提交时间 2014-10-24 21:48:29 内存使用 0.55 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#define MAX 1<<29
#define N 500
#define M 10010
using namespace std;
int head[N],nex[2*M],to[2*M],c[2*M];
int tot=0,d[N],res;
struct node{
	int i,d;
	bool operator < (const node& rhs) const{
		return d>rhs.d;
	}
};
void add(int u,int v,int w)
{
	nex[++tot]=head[u];
	head[u]=tot;
	to[tot]=v;
	c[tot]=w;
}
priority_queue<node> que;
int djs()
{
	 d[res]=0;
	 que.push((node){res,0});
	 while(!que.empty())
	 {
	 	node u=que.top();
	 	que.pop();
	 	for(int i=head[u.i];i!=-1;i=nex[i])
	 	{
	 		int v=to[i];
	 		if(d[v]>d[u.i]+c[i])
	 		{
	 			d[v]=d[u.i]+c[i];
	 			que.push((node){v,d[v]});
	 		}
	 	}
	 }
}
int main()
{
	freopen("hardest.in","r",stdin);
	freopen("hardest.out","w",stdout);
	int n,m;
	int t,cas=0;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d",&n,&m);
		memset(head,-1,sizeof(head));
		memset(to,0,sizeof(to));
		memset(c,0,sizeof(c));
		memset(nex,0,sizeof(nex));
		tot=0;
		for(int i=0;i<=n;i++)
			d[i]=MAX;
		for(int i=1;i<=m;i++)
		{
			int u,v,w;
			scanf("%d%d%d",&u,&v,&w);
			add(u,v,w);
			add(v,u,w);
		}
		res=1;
		djs();
		
		printf("%d\n",(d[n]==MAX? -1 : d[n]));
	}
	return 0;
}