#include<bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define sz size()
#define all(a)  a.begin(),a.end() 
#define SL(n) scanf("%d",&n)
#define PL(n) printf("%lld",n)
#define fill(a, x) memset(a,x,sizeof(a));
#define mod 1000000007

using namespace std;
typedef int LL;
typedef vector <LL> VL;
typedef map <LL, LL> ML;
typedef pair<LL, LL> PL;
typedef vector <pair <LL, LL> > VPL;

int main(){
    LL T;
    SL(T);
    LL x, y, z;
    while(T--){
        LL N, M;
        SL(N);
        SL(M);
        vector<vector<LL> > Undirected;
        map<pair<LL, LL>, LL> Cost;
        Undirected.resize(N+5);
        for(LL m=0;m<M;++m){
            SL(x);
            SL(y);
            SL(z);
            Cost[mp(x, y)] = z;
            Undirected[x].pb(y);
        }
        LL start, end;
        scanf("%d %d", &start, &end);
        set<pair<LL, LL> > Q;
        Q.insert(mp((LL)0, start));
        bool flag = 0;
        bool Vis[N+5];
        LL Dist[N+5];
        for(LL n=1;n<=N;++n){
            Vis[n] = 0;
            Dist[n] = 1e9;
        }
        Dist[start]  = 0;
        while(Q.sz > 0){
            x=Q.begin()->second;
            y=Q.begin()->first;
            Q.erase(Q.begin());
            if(x == end) {
                flag = 1;
                break;
            }
            for(LL n=0;n<Undirected[x].sz;++n){
                if(Vis[Undirected[x][n]] == 0 || Vis[Undirected[x][n]] == 1 && Dist[Undirected[x][n]] > Dist[x] + Cost[mp(x, Undirected[x][n])]){//  Graph[x][Undirected[x][n]]){
                    if(Vis[Undirected[x][n]] == 1){
                        Q.erase(Q.find(mp(Dist[Undirected[x][n]], Undirected[x][n])));
                    }
                    else{
                        Vis[Undirected[x][n]] = 1;
                    }
                    Dist[Undirected[x][n]] = Dist[x] + Cost[mp(x, Undirected[x][n])];
                    Q.insert(mp(Dist[Undirected[x][n]], Undirected[x][n]));
                }
            }
        }
        if(flag == 0){
            printf("NO\n");
        }
        else{
            printf("%d\n", Dist[end]);
        }
    }
    return 0;
}
