Cod sursa(job #3215316)

Utilizator AndreidreiGresoiu Liviu-Andrei Andreidrei Data 14 martie 2024 20:14:06
Problema Tricouri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <bits/stdc++.h>
#include <cstring>
#include <cstdio>
#pragma GCC optimize ("O3")
#define din cin
#define dout out
#define pi 3.14159265359
#define sw(x,y) x^=y,y^=x,x^=y
#define bmin(a,b)((a<b)?(a):(b))
#define bmax(a,b)((a>b)?(a):(b))
#define bminify(a,b)a=bmin(a,b)
#define bmaxify(a,b)a=bmax(a,b)
#define fto(i,ii,n)for(i=ii;i<n;i++)
#define f first
#define s second
#define mod 2000003ll
#define nmax 1000005
#define lim 351
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
typedef long long ll;
ifstream in("queries.in");
ofstream out("queries.out");
//FILE *fin=fopen("infasuratoare.in","r");
//FILE *fout=fopen("infasuratoare.out","w");
int q,n,m,i,j,k,l,d[nmax],s0,s1,c[nmax],u,v[nmax];
vector<int>cofs[nmax],sofc[nmax];
int main()
{
cin>>q;
while(q--){
    cin>>n>>m;
    while(m--)cin>>i>>j>>k,cofs[i].emplace_back(k),cofs[j].emplace_back(k),sofc[k].emplace_back(i),sofc[k].emplace_back(j),d[k]=INT_MAX;
    cin>>s0>>s1;u=l=0;
    fill(v,v+n+1,1);v[s0]=0;
    for(auto j:cofs[s0])if(d[j]==INT_MAX)d[j]=1,c[l++]=j;
    while(u<l){
        i=c[u];
        for(auto j:sofc[i])
            if(v[j]){
                v[j]=0;
                for(auto k:cofs[j])
                    if(d[k]==INT_MAX)d[k]=d[i]+1,c[l++]=k;
        }
        u++;
    }
    k=n;
    for(auto i:cofs[s1])bminify(k,d[i]);
    if(s0==s1)k=0;
    cout<<k<<"\n";
    for(i=1;i<=n;i++){
        for(auto j:cofs[i])sofc[j].clear();
        cofs[i].clear();
    }
}
}