Cod sursa(job #298656)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 6 aprilie 2009 11:51:46
Problema PScNv Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <stdio.h>
#define N 250052
#define infinit 0x3f3f3f

using namespace std;

struct nod
{
     int inf,K;
     nod *next;
}*sir[N];

int Q[N*4],viz[N],D[N*4];
int n,m,s,d,inc,sf;

void add(int a,int b,int P)
{
     nod *q=new nod;
     q->inf=b;
     q->K=P;
     q->next=sir[a];
     sir[a]=q;
}

void citire()
{
     int x,y,k;
     freopen ("pscnv.in","r",stdin);
     freopen ("pscnv.out","w",stdout);
     scanf ("%d %d %d %d",&n,&m,&s,&d);
     for (int i=0;i<m;i++)
     {
          scanf ("%d %d %d",&x,&y,&k);
          add(x,y,k);
     }
}

int maxi(int a,int b)
{
     return a>b?a:b;
}

void solve()
{
     for (int i=1;i<=n;i++)
          D[i]=infinit;
     int dist,No;
     Q[0]=s;
     D[s]=0;
     viz[s]=0;
     inc=0;
     sf=1;
     while (inc<sf)
     {
          No=Q[inc++];
          viz[No]=0;
          dist=D[No];
          for (nod *q=sir[No];q;q=q->next)
               if (maxi(dist,q->K)<D[q->inf])
               {
                    D[q->inf]=maxi(dist,q->K);
                    if (!viz[q->inf])
                    {
                         viz[q->inf]=1;
                         Q[sf++]=q->inf;
                    }
               }
     }
     printf("%d\n",D[d]);
}

int main ()
{
     citire();
     solve();
     return 0;
}