Pagini recente » Cod sursa (job #1912417) | Cod sursa (job #1595404) | Cod sursa (job #717855) | Cod sursa (job #2127349) | Cod sursa (job #22207)
Cod sursa(job #22207)
#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
int n, m, k, p;
vector<int> fii[151];
vector<int> tmp[151];
vector<int> intl[2];
int pos[151][4501];
int amm[151][4501];
int ame[151][3501];
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].push_back(b);
fii[b].push_back(a);
tmp[a].push_back(c);
tmp[b].push_back(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 = 0; j < fii[ nodc ].size(); ++j )
{
pos[ fii[nodc][j] ][ tmpc + tmp[nodc][j] ] = 1;
amm[ fii[nodc][j] ][ tmpc + tmp[nodc][j] ] = max( amm[ fii[nodc][j] ][ tmpc + tmp[nodc][j] ], amm[ nodc ][ tmpc ] );
}
pos[ nodc ][ tmpc+1 ] = 1;
amm[ nodc ][ tmpc+1 ] = max( 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;
}