//第一开始想用dijkstra+priority+变形来写
//写到变形的时候发现,变形后的priority就没什么用了
//也许有用,只是我没想到
//最后就用了dijkstra未优化+邻接矩阵加变形来写了
//单纯的模拟,挺简单的
#include<iostream>
#include<algorithm>
#include<string>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#include<cmath>
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=1005;
int maps[maxn][maxn];
int dis[maxn];//表示源点到该点的最大运货量
int n;//节点数
void Dijkstra(int s) {
int vis[maxn];//表示该点是否已经遍历过
for(int i=1; i<=n; i++) {
dis[i]=maps[1][i];
vis[i]=0;
}
dis[s]=0;
for(int i=1; i<=n; i++) {
int mini=-1;
int k=-1;
for(int j=1; j<=n; j++) {
if(!vis[j]&&dis[j]>mini) {
k=j;
mini=dis[j];
}
}
if(k==-1)
break;
vis[k]=1;
for(int j=1; j<=n; j++) {
if(!vis[j]&&min(dis[k],maps[k][j])>dis[j]) {
dis[j]=min(dis[k],maps[k][j]);
}
}
}
}
int main() {
int T,x,y,D;
scanf("%d",&T);
for(int Case=1; Case<=T; Case++) {
memset(maps,0,sizeof(maps));
int m;
scanf("%d%d",&n,&m);
for(int i=1; i<=m; i++) {
scanf("%d%d%d",&x,&y,&D);
if(D>maps[x][y]) {
maps[x][y]=maps[y][x]=D;
}
}
Dijkstra(1);
printf("Scenario #%d:\n",Case);
printf("%d\n\n",dis[n]);
}
return 0;
}
POJ 1797 Dijkstra
猜你喜欢
转载自blog.csdn.net/shadandeajian/article/details/81278923
今日推荐
周排行