Spoj EZDIJKST Solution

#include<bits/stdc++.h>
#define pii pair<int, int>
#define INF 1<<30
using namespace std;
int node, edge;
int dijstkra(vector<pii>adj[], int start, int finish)
{
    priority_queue<pii, vector<pii>, greater<pii>> q;
    vector<int> d(node+5, INF);

    d[start] = 0;
    q.push(pii(0, start));

    while(!q.empty())
    {
        int u = q.top().second;
        q.pop();

        if(u == finish)
            return d[u];

        for(auto x : adj[u])
        {
            int v = x.first;
            int w = x.second;

            if(d[v] > d[u] + w)
            {
                d[v] = d[u] + w;
                q.push(pii(d[v], v));
            }
        }
    }

    return d[finish];
}

int main()
{
    ios_base :: sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int t;
    cin >> t;
    while(t--)
    {
        cin >> node >> edge;
        vector<pii>adj[node+5];

        int n1, n2, w, node1, node2;

        for(int i=1; i<=edge; i++)
        {
            cin >> n1 >> n2 >> w;

            adj[n1].push_back(pii(n2, w));
        }

        cin >> node1 >> node2;

        int result = dijstkra(adj, node1, node2);

        if(result == (1<<30))
            cout << "NO" << "\n";
        else
            cout << result << "\n";

    }

    return 0;
}

Comments