Cod sursa(job #378517)

Utilizator freak93Adrian Budau freak93 Data 28 decembrie 2009 19:55:46
Problema PScNv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>

using namespace std;

const char iname[]="pscnv.in";
const char oname[]="pscnv.out";
const int maxn=250005;
const int INF=100005;

char s[1024];
int p=1023;
void cit(int &x)
{
    while(s[p]<'0'||s[p]>'9')
        if(++p==1024)
            fread(s,1,1024,stdin),p=0;
    x=0;
    while(s[p]>='0'&&s[p]<='9')
    {
        x=(x<<3)+(x<<1)+s[p]-'0';
        if(++p==1024)
            fread(s,1,1024,stdin),p=0;
    }
}

vector<pair<int,int> > E[maxn];

vector<int> disE[maxn];

int n,x,y,i,z,k,S,D,m,dis[maxn],j;

int main()
{
    freopen(iname,"r",stdin);
    freopen(oname,"w",stdout);

    cit(n);cit(m);cit(S);cit(D);
    for(i=1;i<=m;++i)
    {
        cit(x);cit(y);cit(z);
        E[x].push_back(make_pair(y,z));
    }

    for(i=1;i<=n;++i)
        dis[i]=INF;

    disE[0].push_back(S);
    dis[S]=0;
    for(i=0;i<=1000;++i)
        for(j=0;j<disE[i].size();++j)
            if(dis[disE[i][j]]==i)
            {
                    for(vector<pair<int,int> >::iterator jt=E[disE[i][j]].begin();jt!=E[disE[i][j]].end();++jt)
                    if(max(jt->second,i)<dis[jt->first])
                        dis[jt->first]=max(jt->second,i),disE[max(jt->second,i)].push_back(jt->first);
            }

    printf("%d\n",dis[D]);

    fclose(stdin);
    fclose(stdout);

    return 0;
}