记录编号 49249 评测结果 AAAAA
题目名称 最难的任务 最终得分 100
用户昵称 GravatarTruth.Cirno 是否通过 通过
代码语言 C++ 运行时间 0.225 s
提交时间 2012-11-07 15:37:09 内存使用 0.52 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <memory.h>
#include <queue>
using namespace std;

int waynum[210],wayto[210][210],waycost[210][210],mincost[210];
bool inque[210];
queue<int> que;

int main(void)
{
	freopen("hardest.in","r",stdin);
	freopen("hardest.out","w",stdout);
	int times,i,T,n,m,a,b,c;
	cin>>T;
	for (times=1;times<=T;times++)
	{
		memset(waynum,0,sizeof(waynum));
		memset(wayto,0,sizeof(wayto));
		memset(waycost,0,sizeof(waycost));
		cin>>n>>m;
		for (i=1;i<=n;i++)
			mincost[i]=1000000000;
		for (i=1;i<=m;i++)
		{
			cin>>a>>b>>c;
			wayto[a][waynum[a]]=b;
			wayto[b][waynum[b]]=a;
			waycost[a][waynum[a]]=c;
			waycost[b][waynum[b]]=c;
			waynum[a]++;
			waynum[b]++;
		}
		mincost[1]=0;
		que.push(1);
		inque[1]=true;
		while (!que.empty())
		{
			a=que.front();
			for (i=0;i<waynum[a];i++)
			{
				b=wayto[a][i];
				c=waycost[a][i];
				if (mincost[b]>mincost[a]+c)
				{
					mincost[b]=mincost[a]+c;
					if (!inque[b])
					{
						que.push(b);
						inque[b]=true;
					}
				}
			}
			que.pop();
			inque[a]=false;
		}
		if (mincost[n]!=1000000000)
			cout<<mincost[n]<<endl;
		else
			cout<<"-1\n";
	}
	return(0);
}