CCCPaste

Untitled

#include 
#include 
#include 
using namespace std;
const int maxn = 1e5 + 10;
const int INF = 1e9;
vector > graph[maxn];
int n, m;
struct node {
    int idx;
    int cost;
    node () {}
    node(int _idx, int _cost) {
        idx = _idx;
        cost = _cost;
    }
    bool operator < (const node & tmp) const {
        return cost > tmp.cost;
    }
};
void dijkstra(int S, int E) {
    vector dist(n, INF);
    vector visited(n, false);
    
    dist[S] = 0;
    priority_queue pq;
    pq.push(node(S, 0));
    
    while(!pq.empty()) {
        node c = pq.top();
        pq.pop();
        
        if(visited[c.idx]) continue;
        visited[c.idx] = true;
        
        for(pair tmp : graph[c.idx]) {
            int neighbour = tmp.first;
            int weight = tmp.second;
            
            if(!visited[neighbour] and c.cost + weight < dist[neighbour]) {
                pq.push(node(neighbour, c.cost + weight));
                dist[neighbour] = c.cost + weight;
            }
        }
    }
    cout << dist[E] << endl;
}
int main() {
    cin >> n >> m;
    
    for(int i =0 ; i < m; i++) {
        int a, b, c;
        cin >> a >> b >> c;
        a--; b--;
        graph[a].push_back(make_pair(b, c));
        graph[b].push_back(make_pair(a, c));
    }
    dijkstra(0, 4);
    
    return 0;
}
/*
 5 5
 1 2 2
 2 3 4
 1 3 2
 3 4 5
 4 5 6
 **/