Pagini recente » Cod sursa (job #49748) | Cod sursa (job #1208961) | Cod sursa (job #1478140) | Cod sursa (job #1058892) | Cod sursa (job #23495)
Cod sursa(job #23495)
#include<stdio.h>
#include<vector>
using namespace std;
const int maxn = 151;
const int maxn2 = 3501;
vector<int> vect[maxn];
vector<int> vect2[maxn];
vector<int> vectt[maxn2];
vector<int> vectt2[maxn2];
int a[maxn2][maxn];
int n;
int m;
int k;
int p;
int x,y,c;
int i,j;
int max(int a,int b)
{
if (a<b) return b;
return a;
}
int main()
{
freopen("amenzi.in","r",stdin);
freopen("amenzi.out","w",stdout);
scanf("%d %d %d %d",&n,&m,&k,&p);
for(i=1;i<=m;i++)
{
scanf("%d %d %d",&x,&y,&c);
vect[x].push_back(y);
vect2[x].push_back(c);
vect[y].push_back(x);
vect2[y].push_back(c);
}
for(i=1;i<=k;i++)
{
scanf("%d %d %d",&x,&y,&c);
vectt[y].push_back(x);
vectt2[y].push_back(c);
}
for(i = 0;i <= n ; ++i)
for(j = 0; j <= 3500 ; ++j)
{
a[j][i]=-1000000;
}
a[0][1] = 0;
for(i = 1; i <= 3500; ++i)
{
for(j = 1; j<= n; ++j)
{
a[i][j]=a[i-1][j];
vector <int> :: iterator it;
vector <int> :: iterator it2;
for(it2 = vect2[j].begin(),it = vect[j].begin(); it != vect[j].end(); ++it2, ++it)
{
int x = i-*it2;
int y = *it;
if (x >= 0) a[i][j] = max(a[i][j],a[x][*it]);
}
}
vector <int> :: iterator it;
vector <int> :: iterator it2;
for(it2 = vectt2[i].begin(), it = vectt[i].begin(); it != vectt[i].end(); ++it2, ++it)
{
a[i][*it]+=*it2;
}
}
for(i = 1; i <= p; ++i)
{
scanf("%d %d",&x,&y);
if (a[y][x]!=0)printf("%d\n",a[y][x]);
else printf("-1\n");
}
return 0;
}