Cod sursa(job #169539)

Utilizator crawlerPuni Andrei Paul crawler Data 1 aprilie 2008 19:44:47
Problema PScNv Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <cstdio>
#include <vector>
#include <bitset>
#include <algorithm>


using namespace std;

#define Nmax 25006

vector < pair<int,int> > l[Nmax];
bitset <Nmax> v;

int n,m,K,x,y;

#define Dim 10000
int poz=0;
char buf[Dim];

inline int cit()
{
       int ret=0;
       while (buf[poz] < 48) if (++poz == Dim) fread(buf,1,Dim,stdin), poz=0;
       while (buf[poz] > 47) 
       {
             ret = ret*10+buf[poz]-48;
             if (++poz == Dim) fread(buf,1,Dim,stdin), poz=0;
       }
       return ret;
}

void DF(int nod)
{
     v[nod] = 1;
     for (unsigned int i=0;i<l[nod].size();++i) 
     if(v[l[nod][i].first] == 0 && l[nod][i].second <= K) DF(l[nod][i].first);     
}

int main()
{
    freopen("pscnv.in","r",stdin);
    freopen("pscnv.out","w",stdout);

    fread(buf,1,Dim,stdin); poz=0;
        
    n = cit(); m = cit(); x = cit(); y = cit();
    
    int A,B,C;
    
    for (int i=1;i<=m;++i)
    {
        A = cit(); B = cit(); C = cit();
        l[A].push_back(make_pair(B,C));
        l[B].push_back(make_pair(A,C));    
    }
    
    int poz=1;

    
    #define Q(XXX) K+=XXX; v=0; DF(x);  if (!v[y]) poz+=XXX; else K-= XXX;
    Q(512) Q(256) Q(128) Q(64) Q(32) Q(16) Q(8) Q(4) Q(2) Q(1)     

    
    printf("%d\n", poz);
    
    return 0;    
}