记录编号 188227 评测结果 AAAAA
题目名称 最难的任务 最终得分 100
用户昵称 Gravatarmikumikumi 是否通过 通过
代码语言 C++ 运行时间 0.067 s
提交时间 2015-09-22 07:20:12 内存使用 0.45 MiB
显示代码纯文本
#include<cstdio>
#include<deque>
#include<queue>
using namespace std;
int T,n,m;
int sw[210];
int maxn=0x7fffffff;
deque<int> s[210],p[210];
int SPFA()
{
	bool inq[210]={0};
	priority_queue<pair<int,int> > Q;
	for(int i=1;i<=n;i++)
		sw[i]=maxn;
	sw[1]=0;inq[1]=1;
	Q.push(make_pair(-sw[1],1));
	while(!Q.empty())
	{
		int x=Q.top().second;Q.pop();inq[x]=0;
		for(int i=0;i<s[x].size();i++)
		{
			int to=s[x][i];
			if(sw[x]+p[x][i]<sw[to])
			{
				sw[to]=sw[x]+p[x][i];
				if(inq[to]==0)
				{
					inq[to]=1;
					Q.push(make_pair(-sw[to],to));
				}
			}
		}
	}
	if(sw[n]==maxn) return -1;
	else return sw[n];
}
int main()
{
	freopen("hardest.in","r",stdin);
	freopen("hardest.out","w",stdout);
	scanf("%d",&T);
	for(int i=1;i<=T;i++)
	{
		scanf("%d%d",&n,&m);
		int fr,to,k;
		for(int j=1;j<=n;j++)
			s[j].clear(),p[j].clear();
		for(int j=1;j<=m;j++)
		{
			scanf("%d%d%d",&fr,&to,&k);
			s[fr].push_back(to);p[fr].push_back(k);
			s[to].push_back(fr);p[to].push_back(k);
		}
		printf("%d\n",SPFA());
	}
	return 0;
}