Cod sursa(job #609685)

Utilizator Smaug-Andrei C. Smaug- Data 22 august 2011 21:15:11
Problema Amenzi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>
#include <vector>
#include <utility>
using namespace std;

#define MAXN 155
#define MAXT 3505

int main(){

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

  int N, M, K, P, i, j, a, b, c, maxa;
  vector< pair<int,int> > G[MAXN];
  vector< pair<int,int> >::iterator ii;
  static int A[MAXN][MAXT], OK[MAXN][MAXT];

  scanf("%d%d%d%d", &N, &M, &K, &P);

  for(i=1; i<=M; i++){
    scanf("%d%d%d", &a, &b, &c);
    G[a].push_back(make_pair(b,c));
    G[b].push_back(make_pair(a,c));
  }

  for(i=1; i<=K; i++){
    scanf("%d%d%d", &a, &b, &c);
    A[a][b]+=c;
  }

  OK[1][0]=1;

  for(i=1; i<MAXT; i++){
    for(j=1; j<=N; j++){
      if(OK[j][i-1]){
	maxa=A[j][i-1];
	OK[j][i]=1;
      }
      else
	maxa=0;

      for(ii=G[j].begin(); ii!=G[j].end(); ii++)
	if(i-ii->second>=0 && A[ii->first][i-ii->second]>=maxa && OK[ii->first][i-ii->second]){
	  maxa=A[ii->first][i-ii->second];
	  OK[j][i]=1;
	}

      A[j][i]+=maxa;
    }
  }

  for(i=1; i<=P; i++){
    scanf("%d%d", &a, &b);
    printf("%d\n", A[a][b]);
  }

  return 0;

}