Cod sursa(job #2755058)

Utilizator BalaBossBalaBoss BalaBoss Data 26 mai 2021 19:17:00
Problema PScNv Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.89 kb
#include <bits/stdc++.h>
#define N 100005
#define f first
#define s second
#define INF 0x3F3F3F3F

using namespace std;

ifstream fin ("pscnv.in");
ofstream fout ("pscnv.out");

    vector< pair<int,int> > l[N];
    vector< pair<int,int> > g[N];
    int n,m,p,q,x,y,z,k;
    int v[N],st[N],d[N],viz[N],dp[N];
    int vmin[N],vmini[N];
    queue<int> qc;

void Citire()
{
    fin>>n>>m>>p>>q;
    for(int i=1;i<=m;++i)
    {
        fin>>x>>y>>z;
        g[x].push_back(make_pair(y,z));
        l[y].push_back(make_pair(x,z));
    }
}

void DFS(int x)
{
    viz[x]=1;
    for(int i=0;i<g[x].size();i++)
        if(viz[g[x][i].f]==0)
        DFS(g[x][i].f);
    st[k--]=x;
}

void SortTop()
{
    k=n;
    for(int i=1;i<=n;++i)
        if(viz[i]==0)
        DFS(i);
}

void Solve()
{
    for(int i=1;i<=n;++i)
    {
        int x=st[i];
        int minim=INF;
        if(l[x].size()==0)vmin[x]=0;
        else
        {
            for(int j=0;j<l[x].size();j++)
                {
                int nod=l[x][j].f;
                int dist=l[x][j].s;

                if(max(vmin[nod],dist)<minim)
                    minim=max(vmin[nod],dist);
                }
        vmin[x]=minim;
        }

    }
}

void Dijkstra()
{
    for(int i=1;i<=n;++i)
        vmini[i]=INF;
    vmini[p]=0;
    d[p]=0;v[p]=1;

    qc.push(p);
    while(!qc.empty())
    {
        int x=qc.front();
        qc.pop();
        v[x]=0;
        for(int i=0;i<g[x].size();i++)
        {
            int nod=g[x][i].f;
            int dist=g[x][i].s;
            if(vmini[nod]>max(vmini[x],dist))
                vmini[nod]=max(vmini[x],dist);
            if(v[nod]==0)
            {
                qc.push(nod);
                v[nod]=1;
            }
        }
    }
}


int main()
{

    Citire();
    Dijkstra();
    fout<<vmini[q];
    return 0;
}