比赛 20110727 评测结果 AAAAAAAAA
题目名称 道路重建 最终得分 100
用户昵称 donny 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-07-27 10:01:17
显示代码纯文本
#include <iostream>
#include <fstream>
#include <cmath>
#include <cstring>
#include <iomanip>

using namespace std;

int i,j,k,l,s,t;
int a[101][101],b[101][101],n,m;
int f[101];
int queue[10000];
int head,tail;

void spfa()
{
	head=1;
	tail=1;
	queue[1]=s;
	
	for (i=1;i<=n;i++)
		f[i]=99999999;
	
	f[s]=0;
	
	while (head<=tail)
	{
		for (i=1;i<=n;i++)
			if (b[queue[head]][i]!=-1)
			{
				if (f[queue[head]]+b[queue[head]][i]<f[i])
				{
					tail++;
					queue[tail]=i;
					f[i]=f[queue[head]]+b[queue[head]][i];
				}
			}
		head++;
	}
}


int main()
{
	ifstream fin("rebuild.in");
	ofstream fout("rebuild.out");
	
	fin>>n>>m;
	
	for (i=1;i<=m;i++)
	{
		fin>>j>>k>>l;
		a[j][k]=l;
		a[k][j]=l;
	}
	
	fin>>m;
	
	for (i=1;i<=n;i++)
		for (j=1;j<=n;j++)
		{
			if (a[i][j]==0)
			{
				b[i][j]=-1;
			}
			else
			{
				b[i][j]=0;
			}
		}
		
	for (i=1;i<=m;i++)
	{
		fin>>j>>k;
		b[j][k]=a[j][k];
		b[k][j]=a[k][j];
	}
	
	fin>>s>>t;
	
	spfa();
	fout<<f[t];
	
	fin.close();
	fout.close();
	
	return 0;
}