Cod sursa(job #2755142)

Utilizator BalaBossBalaBoss BalaBoss Data 26 mai 2021 20:13:51
Problema PScNv Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.26 kb
#include <bits/stdc++.h>
#define N 250005
#define f first
#define s second
#define INF 0x3F3F3F3F

using namespace std;

FILE *pFile=fopen("pscnv.in","r");
ofstream fout ("pscnv.out");

    vector< pair<int,int> > g[N];
    int n,m,p,q,x,y,z,k,ct;
    int v[N],vmini[N];
    priority_queue< pair<int,int> > qc;

    char s[101];

int CP()
{
    int nr=0;
   while(isdigit(s[ct]))
   {
       nr=nr*10+(s[ct]-'0');
       ct++;
   }
   ct++;
   return nr;
}

void CitireParsata()
{
    fgets(s,101,pFile);

    n=CP();m=CP();p=CP();q=CP();
    for(int i=1;i<=m;++i)
    {
        fgets(s,101,pFile);
        ct=0;
        x=CP();
        y=CP();
        z=CP();
        g[x].push_back(make_pair(y,z));
    }
    fclose(pFile);
}

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

    qc.push(make_pair(0,p));
    while(!qc.empty())
    {
        int x=qc.top().s;
        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&&nod!=q)
                {
                qc.push(make_pair(-vmini[nod],nod));
                v[nod]=1;
                }
            }
        }
    }
}

int main()
{

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

/*
8 9 1 4
1 2 3
1 3 1
1 5 5
2 4 7
3 4 1000
5 7 2
5 8 6
8 4 1
4 6 69


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;
        }

    }
}
*/