#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
Post a Comment