Pagini recente » Cod sursa (job #2328992) | Cod sursa (job #2171264) | Cod sursa (job #3033175) | Cod sursa (job #2414217) | Cod sursa (job #24414)
Cod sursa(job #24414)
#include<stdio.h>
#include<vector>
using namespace std;
const int maxn = 151;
const int maxn2 = 3501;
const int inf = 1000000000;
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]=-inf;
}
a[0][1] = 0;
j = 1;
for(i = 0; i <= 3500; ++i)
{
vector <int> :: iterator itt;
vector <int> :: iterator itt2;
for(itt2 = vectt2[i].begin(), itt = vectt[i].begin(); itt != vectt[i].end(); ++itt2, ++itt)
{
if (a[i][*itt] >= 0) a[i][*itt] += *itt2;
}
for(j = 1; j <= n; ++j)
{
vector <int> :: iterator it;
vector <int> :: iterator it2;
if (a[i][j] >= 0)
{
a[i+1][j] = max(a[i][j] , a[i+1][j]);
for(it2 = vect2[j].begin(),it = vect[j].begin(); it != vect[j].end(); ++it2, ++it)
{
int x = i + *it2;
if (x <= 3500 && x > 0) a[x][*it] = max(a[i][j],a[x][*it]);
}
}
}
}
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;
}