Pagini recente » Cod sursa (job #2759459) | Cod sursa (job #681) | Cod sursa (job #19021) | Cod sursa (job #1875522) | Cod sursa (job #339463)
Cod sursa(job #339463)
#include <cstdio>
#include <vector>
using namespace std;
#define file_in "amenzi.in"
#define file_out "amenzi.out"
#define mp make_pair
#define pb push_back
#define Nmax 200
#define Tmax 3501
vector< pair<int, int> > v[Nmax];
int n,m,k,p,i,j,a,b,c;
int t[Tmax][Nmax];
int am[Tmax][Nmax];
inline int max(int a, int b) { return a>b?a:b; }
int main()
{
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d %d %d %d", &n,&m,&k,&p);
for (i=1;i<=m;++i)
{
scanf("%d %d %d", &a, &b,&c);
a--;
b--;
v[a].pb(mp(b,c));
v[b].pb(mp(a,c));
}
for (i=1;i<=k;++i)
{
scanf("%d %d %d", &a, &b,&c);
a--;
am[b][a]+=c;
}
vector< pair <int,int> > :: iterator it;
t[0][0]=1;
for (i=0;i<Tmax;++i)
for (j=0;j<n;++j)
if (t[i][j]!=0)
{
t[i][j]+=am[i][j];
t[i+1][j]=max(t[i][j],t[i+1][j]);
for (it=v[j].begin();it!=v[j].end();++it)
if (i+it->second<Tmax)
t[i+it->second][it->first]=max(t[i+it->second][it->first], t[i][j]);
}
for (i=1;i<=p;++i)
{
scanf("%d %d", &a, &b);
a--;
printf("%d\n", t[b][a]-1);
}
fclose(stdin);
fclose(stdout);
return 0;
}