记录编号 49198 评测结果 AAAAA
题目名称 最难的任务 最终得分 100
用户昵称 GravatarCloud 是否通过 通过
代码语言 C++ 运行时间 0.175 s
提交时间 2012-11-07 14:49:40 内存使用 3.30 MiB
显示代码纯文本
#include<fstream>
#include<queue>
#include<set>
using namespace std;
int map[201][201];
struct yu
{
	int v;
	int x;
};
yu tmp;
int n,m;
int spfa()
{
	int f[201];
	int i;
	f[1]=0;
	for(i=2;i<=n;i++)
		f[i]=~0u>>1;
	queue<yu> dq;
	tmp.x=1;
	tmp.v=0;
	dq.push(tmp);
	while(dq.size())
	{
		for(i=1;i<=n;i++)
		{
			tmp=dq.front();
			if(map[tmp.x][i])
			{
				if(f[i]>map[tmp.x][i]+tmp.v)
				{
					tmp.v=map[tmp.x][i]+tmp.v;
					tmp.x=i;
					f[i]=tmp.v;
					//if(i==n)
						//return f[i];
					if(i!=n)
						dq.push(tmp);
				}
			}
		}
		dq.pop();
	}
	if(f[n]==~0u>>1)
		return -1;
	else
		return f[n];
}
int min(int a,int b)
{
	if(a>b)
		return b;
	else
		return a;
}
int main(void)
{
	ifstream fin("hardest.in");
	ofstream fout("hardest.out");
	int t;
	fin>>t;
	for(;t;t--)
	{
		fin>>n>>m;
		int i,j,k;
		int p;
		for(i=1;i<=n;i++)
			for(j=1;j<=n;j++)
				map[i][j]=0;
		for(p=0;p<m;p++)
		{
			fin>>i>>j>>k;
			if(map[i][j])
				k=min(map[i][j],k);
			map[i][j]=k;
			map[j][i]=k;
		}
		fout<<spfa()<<endl;
	}
	fin.close();
	fout.close();
	return 0;
}