Cod sursa(job #169555)

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


using namespace std;

#define Nmax 250006

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[y] == 1) return;
          if (v[l[nod][i].second] == 0 && l[nod][i].first <= K) DF(l[nod][i].second);     
     }
}

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

    fread(buf,1,Dim,stdin); poz=0;
        
    n = cit(); m = cit(); y = cit(); x = cit();
    
    int A,B,C;
    
    for (int i=1;i<=m;++i)
    {
        A = cit(); B = cit(); C = cit();
        l[A].push_back(make_pair(C,B));
        l[B].push_back(make_pair(C,A));    
    }
    
    int poz=1;
    
    //for (int i=1;i<=n;++i) sort(l[i].begin(),l[i].end());
        
    #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;    
}