Cod sursa(job #603281)

Utilizator Smaug-Andrei C. Smaug- Data 15 iulie 2011 12:12:43
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <cstdio>
#include <vector>
using namespace std;

#define MAXN 30005
#define MAXM 100030

int main(){

  freopen("sate.in", "r", stdin);
  freopen("sate.out", "w", stdout);

  int N, M, X, Y, i, r, f, n, c;
  static int D[2*MAXM], B[2*MAXM], Q[MAXN], use[MAXN], C[MAXN];
  vector<int> G[MAXN];
  vector<int>::iterator ii;
  
  scanf("%d%d%d%d", &N, &M, &X, &Y);
  for(i=1; i<=M; i++){
    scanf("%d%d%d", B+i+M, B+i, D+i);
    D[i+M]=-D[i];
    G[B[i+M]].push_back(i);
    G[B[i]].push_back(i+M);
  }

  Q[1]=X; r=1; use[X]=1;
  for(i=1; i<=r; i++){
    n=Q[i]; c=C[i];
    if(n == Y){
      f=c; break;
    }

    for(ii=G[n].begin(); ii!=G[n].end(); ii++)
      if(!use[B[*ii]]){
	use[B[*ii]]=1;
	Q[++r]=B[*ii];
	C[r]=c+D[*ii];
      }
  }
	

  printf("%d\n", f);

  return 0;

}