比赛 20150714B 评测结果 AAAAA
题目名称 最难的任务 最终得分 100
用户昵称 Satoshi 运行时间 0.074 s
代码语言 C++ 内存使用 0.25 MiB
提交时间 2015-07-14 09:12:13
显示代码纯文本
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ifstream in("hardest.in");
ofstream out("hardest.out");
int T;
int INF=1<<28;
int m,n;
vector<int> G[201],C[201];
int DIJ()
{
	int f[201];
	bool l[201];
	int i;
	priority_queue <pair<int,int> > q;
	for(i=1;i<=n;i++)
	{
		f[i]=INF;
		l[i]=0;
	}
	q.push(make_pair(-f[1],1));
	f[1]=0;
	l[1]=1;
	
	while(!q.empty())
	{
		int u= q.top().second;
		q.pop();
		l[u]=0;
		for(i=0;i<G[u].size();i++)
		{
			int v=G[u][i];
			int c=C[u][i];
			if(f[v]>f[u]+c)
			{
				f[v]=f[u]+c;
				if(!l[v])
				{
					l[v]=1;
					q.push(make_pair(-f[v],v));
				}
			}
		}
	}
	return f[n];
}
int main()
{
	int i;
	int T,a,b,c,ans;
	in>>T;
	while(T--)
	{
		in>>n>>m;
		for(i=1;i<=200;i++)
		{
			G[i].clear();
			C[i].clear();
		}
		for(i=1;i<=m;i++)
		{
			in>>a>>b>>c;
			G[a].push_back(b);
			G[b].push_back(a);
			C[a].push_back(c);
			C[b].push_back(c);
		}
		ans=DIJ();
		if(ans==INF)out<<-1<<endl;
		else out<<ans<<endl;
	}
	return 0;
}