比赛 20160923 评测结果 AAAAAAAAA
题目名称 道路重建 最终得分 100
用户昵称 Ostmbh 运行时间 0.013 s
代码语言 C++ 内存使用 0.39 MiB
提交时间 2016-09-23 20:59:19
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int dis[101];
int vis[101]={0};
int w[101][101];
int r[101][101]={0};
int main(){
	freopen("rebuild.in","r",stdin);
	freopen("rebuild.out","w",stdout);
	int n,m;
	scanf("%d %d",&n,&m);
	int x,y,z;
	memset(dis,127/2,sizeof(dis));
	memset(w,127/2,sizeof(w));
	for(int i=1;i<=m;i++){
		cin>>x>>y>>z;
		w[x][y]=w[y][x]=z;
	}
	int kd=dis[0];
	int k;
	cin>>k;
	for(int i=1;i<=k;i++){
		cin>>x>>y;
		r[x][y]=r[y][x]=w[x][y];
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(w[i][j]==kd)
				r[i][j]=r[j][i]=kd;
	int st,en;
	cin>>st>>en;
	dis[st]=0;
	for(int i=1;i<=n;i++){
		int minn=0x7fffffff,u;
		for(int j=1;j<=n;j++)
			if(dis[j]<minn&&!vis[j]){
				minn=dis[j];
				u=j;
			}
		vis[u]=1;
		for(int j=1;j<=n;j++){
			if(dis[j]>dis[u]+r[u][j]&&!vis[j])
				dis[j]=dis[u]+r[u][j];
		}
	}
	cout<<dis[en]<<endl;
	/*for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++)
			cout<<w[i][j]<<' ';
		cout<<endl;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++)
			cout<<r[i][j]<<' ';
		cout<<endl;
	}*/
return 0;
}