Pagini recente » Cod sursa (job #2494298) | Cod sursa (job #2404882) | Cod sursa (job #2209099) | Cod sursa (job #786403) | Cod sursa (job #22215)
Cod sursa(job #22215)
#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
int n, m, k, p;
int fii[151][151];
int tmp[151][151];
int pos[151][4501];
int amm[151][4501];
int ame[151][3501];
inline int maxc( int a, int b )
{
if ( a > b ) return a;
return b;
}
int main()
{
int a,b,c;
int i;
int nodc,tmpc,j;
freopen("amenzi.in","r",stdin);
freopen("amenzi.out","w",stdout);
scanf("%d %d %d %d\n", &n, &m, &k, &p);
for ( i = 1; i <= m; ++i )
{
scanf("%d %d %d\n", &a, &b, &c);
fii[a][0]++;
fii[a][ fii[a][0] ] = b;
fii[b][0]++;
fii[b][ fii[b][0] ] = a;
tmp[a][ fii[a][0] ] = c;
tmp[b][ fii[b][0] ] = c;
}
for ( i = 1; i <= k; ++i )
{
scanf("%d %d %d\n", &a, &b, &c);
ame[a][b] += c;
}
pos[1][0] = 1;
for ( tmpc = 0; tmpc <= 3500; ++tmpc )
for ( nodc = 1; nodc <= n; ++nodc )
{
if ( pos[ nodc ][ tmpc ] )
{
amm[ nodc ][ tmpc ] += ame[ nodc ][ tmpc ];
for ( j = 1; j <= fii[ nodc ][ 0 ]; ++j )
{
pos[ fii[nodc][j] ][ tmpc + tmp[nodc][j] ] = 1;
amm[ fii[nodc][j] ][ tmpc + tmp[nodc][j] ] = maxc( amm[ fii[nodc][j] ][ tmpc + tmp[nodc][j] ], amm[ nodc ][ tmpc ] );
}
pos[ nodc ][ tmpc+1 ] = 1;
amm[ nodc ][ tmpc+1 ] = maxc( amm[ nodc ][ tmpc ], amm[ nodc ][ tmpc+1 ] );
}
}
for ( i = 1; i <= p; ++i )
{
scanf("%d %d\n", &a, &b);
if ( pos[ a ][ b ] == 0 )
printf("-1\n");
else printf("%d\n", amm[ a ][ b ] );
}
fclose(stdin);
fclose(stdout);
return 0;
}