Pagini recente » Cod sursa (job #2145775) | Cod sursa (job #1419059) | Cod sursa (job #2466120) | Cod sursa (job #1389691) | Cod sursa (job #549466)
Cod sursa(job #549466)
#include<cstdio>
#include<vector>
#define Nmax 152
#define Tmax 3502
#define dest first
#define cost second
using namespace std;
int N,M,K,P;
int inf[Nmax][Tmax],sol[Nmax][Tmax],viz[256],dist[Nmax];
vector <pair <int,int> > a[Nmax];
void citeste_muchii(){
for(;M;--M){
int x,y,c;
scanf("%d%d%d",&x,&y,&c);
a[x].push_back(make_pair(y,c));
a[y].push_back(make_pair(x,c));
}
}
void citeste_amenzi(){
for(;K;--K){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
inf[a][b]+=c;
}
}
void calculeaza(){
viz[1]=1;
sol[1][0]=inf[1][0];
memset(dist,0x3f3f3f3f,sizeof(dist));
dist[1]=0;
for(int timp=1;timp<=Tmax;++timp)
for(int i=1;i<=N;++i)
{ if(viz[i]){
for(size_t p=0;p<a[i].size();++p){
if(timp - a[i][p].cost >=0){
viz[a[i][p].dest]=1;
sol[i][timp]=max( sol[i][timp] , sol[ a[i][p].dest ] [ timp- a[i][p].cost] );}
dist[a[i][p].dest]=min(dist[a[i][p].dest],dist[i]+a[i][p].cost);
}
sol[i][timp]=max( sol[i][timp] , sol[i][timp-1] );
if(dist[i]<=timp)
sol[i][timp]+=inf[i][timp];
}
}
}
void afiseaza_sol(){
for(;P;--P){
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",sol[a][b]);
}
}
int main(){
freopen("amenzi.in","r",stdin);
freopen("amenzi.out","w",stdout);
scanf("%d%d%d%d",&N,&M,&K,&P);
citeste_muchii();
citeste_amenzi();
calculeaza();
afiseaza_sol();
return 0;
}