看过题解有dijkstra但是被修改数据导致爆炸的,但是讨论版里面貌似也有dijkstra过了的,所以发个贴,附自己的dijkstra,求dalao们看看。
#include<bits/stdc++.h>
using namespace std;
const int N = 120,MAX = 0x3f3f3f3f;
int n,m,dist[N];
bool vis[N];
struct node{
int id,weight;
};
vector<node> vect[N];//邻接表
int main(){
memset(dist,-1,sizeof(dist));
cin >> n >> m;
for(int i = 1,x,y,z;i <= m;i++){
cin >> x >> y >> z;
vect[x].push_back({y,z});
}
//dijkstra
//设1为初始位置,并把与1联通的所有节点权重加入dist
dist[1] = 0;
//vis[1] = true;
for(int i = 0;i < vect[1].size();i++)
dist[vect[1][i].id] = vect[1][i].weight;
for(int i = 2;i <= n;i++){
int used = 0,minw = 0;
for(int j = 1;j <= n;j++){//贪心求最近下一节点
if(/*!vis[j] && */dist[j] != minw){
used = j;
minw = dist[j];
}
}
//vis[used] = true;
for(int j = 0;j < vect[used].size();j++){//遍历vector,在dist更新可到达的节点权重
node can_get = vect[used][j];
dist[can_get.id] = max(dist[can_get.id], dist[used] + can_get.weight);
}
}
//int ans = 0;
//for(int i = 1;i <= n;i++) ans = max(ans,dist[i]);//遍历数组找最大值
cout << dist[n];
return 0;
}