AC正解代码-dijkstra算法
2026-02-07 13:45:34
发布于:上海
6阅读
0回复
0点赞
给个赞吧,球球啦!

//防复制已经开启
#include<bits/stbc++.h>
using namespace std;
const int maxn=1+10;
struct node{
long long v,w;;
};
vector<node> ve[2][maxn];
long long d[maxn];
bool vis[maxn];
int cnt,n,m;
void dijkstra(int s){
memset(d,0x3f,sizeof(d));
memset(vis,0,sizeof(vis));
d[1]=0;
for(int i=1;i<n;i++){
int id =-1;
for(int j=1;j<=n;j++){
if(!vis[j]){
if(id==-1||d[id]>d[j]){
id=j;
}
}
}
if(id==-1){
break;
}
vis[id]=1;
for(int j=0;j<ve[s][id].size();j++){
int y=ve[s][id][j].v,w=ve[s][id][j].w;
if(d[y]>d[id]+w){
d[y]=d[id]+w;
}
}
}
}
int main(){
cin>>n>>m;
for(int i=0;i<m;i++){
int u;int v;int w;
cin>>u>>v>>w;
ve[0][u].push_back({v,w});
ve[1][v].push_back({u,w});
}
long long ans=0;
dijkstra(0);
for(int i=1;i<=n;i++){
ans+=d[i];
}
dijkstra(1);
for(int i=1;i<=n;i++){
ans+=d[i];
}
cout<<ans;
return 001;
}
这里空空如也






有帮助,赞一个