比赛 |
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;
}