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

using namespace std;

const int oo=10000000;

int g[201][201],n,m;
bool y[201][201];
void init()
{
	scanf("%d%d",&n,&m);
	int a,b,c;
	for (int i=1;i<=n;i++)
	for (int j=1;j<=n;j++)
	if (i!=j)
	{
		g[i][j]=oo;
	}
	for (int i=1;i<=m;i++)
	{
		scanf("%d%d%d",&a,&b,&c);
		g[a][b]=g[b][a]=c;
	}
	scanf("%d",&m);
	
	for (int i=1;i<=m;i++)
	{
		scanf("%d%d",&a,&b);
		y[a][b]=y[b][a]=true;
	}
	
	for (int i=1;i<=n;i++)
	for (int j=1;j<=n;j++)
	if (!y[i][j] && g[i][j]!=oo)
	{
		g[i][j]=0;
	}
}

void solve()
{
	for (int k=1;k<=n;k++)
	for (int i=1;i<=n;i++)
	for (int j=1;j<=n;j++)
	{
		g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
	}
	
	int a,b;
	scanf("%d%d",&a,&b);
	printf("%d\n",g[a][b]);
}

int main()
{
	freopen("rebuild.in","r",stdin);
	freopen("rebuild.out","w",stdout);
	init();
	solve();
	return 0;
}