话不多说上代码
链式前向星233
#include<bits/stdc++.h>
using namespace std;
const int maxn=,_max=0x3fffffff;
//链式前向星
struct bian{
int from,to,dist;
bian(int u,int v,int d) : from(u),to(v),dist(d){}
};//定义一个 边 类型
struct heapn{
int u,d;
heapn(int u,int d): u(u),d(d) {}
bool operator <(const heapn & r) const {
return d>r.d;
}
};//定义一个堆
struct Di{ //重点:
int n,m;
vector<int> g[maxn];
vector<bian> bi;
int dis[maxn],pre[maxn],v[maxn];
void jiaru(int u ,int v ,int d) {
bi.push_back(bian(u,v,d));
g[u].push_back(bi.size()-);
}
void ini(int v_size){
n=v_size;
bi.clear();
for(int i=;i<n;i++) g[i].clear();
memset(pre , ,sizeof(pre));
}
void di(int s){
for(int i=;i<n;i++) dis[i]=_max;
dis[s]=;
memset(v,,sizeof(v));
priority_queue<heapn> q;
q.push(heapn(s,));
while(!q.empty()){
heapn t=q.top();
q.pop();
int x=t.u;
if(v[x]) continue;
v[x]=;
for(int j=;j<n;j++){
bian & e =bi[g[x][j]];
if(dis[x]+e.dist<dis[e.to]){
dis[e.to]=dis[x]+e.dist;
pre[e.to]=x;
q.push(heapn(e.to,dis[e.to]));
}
}
}
}
};
int main(){
Di a;
int u,v,d;
a.ini();
while(){
cin>>u>>v>>d;
a.jiaru(u,v,d);
}
a.di();
cout<<a.dis[]<<endl;
return ;
}