畅通工程续
#include<bits/stdc++.h>
using namespace std;
const int Max=200;
const int INF=INT_MAX;
struct Edge {
int to;
int l;
Edge(int x,int y):to(x),l(y) {}
};
struct Point {
int n;
int distance;
Point(int a,int b):n(a),distance(b) {};
bool operator < (const Point & a) const {
return distance>a.distance;
}
};
vector<Edge> graph[Max];
int dis[Max];
void Dijkstra(int s) {
priority_queue<Point> q;
dis[s]=0;
q.push(Point(s,dis[s]));
while(!q.empty()) {
int u=q.top().n;
q.pop();
for(int i=0; i<graph[u].size(); i++) {
int v=graph[u][i].to;
int l=graph[u][i].l;
if(dis[u]+l<dis[v]) {
dis[v]=dis[u]+l;
q.push(Point(v,dis[v]));
}
}
}
return ;
}
int main() {
int n,m;
while(cin>>n>>m) {
memset(graph,0,sizeof(graph));
fill(dis,dis+n,INF);
for(int i=0; i<m; i++) {
int from,to,l;
cin>>from>>to>>l;
graph[from].emplace_back(Edge(to,l));
graph[to].emplace_back(Edge(from,l));
}
int s,t;
cin>>s>>t;
Dijkstra(s);
if(dis[t]==INF) {
cout<<"-1"<<endl;
} else {
cout<<dis[t]<<endl;
}
}
return 0;
}
using namespace std;
const int Max=200;
const int INF=INT_MAX;
struct Edge {
int to;
int l;
Edge(int x,int y):to(x),l(y) {}
};
struct Point {
int n;
int distance;
Point(int a,int b):n(a),distance(b) {};
bool operator < (const Point & a) const {
return distance>a.distance;
}
};
vector<Edge> graph[Max];
int dis[Max];
void Dijkstra(int s) {
priority_queue<Point> q;
dis[s]=0;
q.push(Point(s,dis[s]));
while(!q.empty()) {
int u=q.top().n;
q.pop();
for(int i=0; i<graph[u].size(); i++) {
int v=graph[u][i].to;
int l=graph[u][i].l;
if(dis[u]+l<dis[v]) {
dis[v]=dis[u]+l;
q.push(Point(v,dis[v]));
}
}
}
return ;
}
int main() {
int n,m;
while(cin>>n>>m) {
memset(graph,0,sizeof(graph));
fill(dis,dis+n,INF);
for(int i=0; i<m; i++) {
int from,to,l;
cin>>from>>to>>l;
graph[from].emplace_back(Edge(to,l));
graph[to].emplace_back(Edge(from,l));
}
int s,t;
cin>>s>>t;
Dijkstra(s);
if(dis[t]==INF) {
cout<<"-1"<<endl;
} else {
cout<<dis[t]<<endl;
}
}
return 0;
}