Pagini recente » Cod sursa (job #1852064) | Cod sursa (job #831263) | Cod sursa (job #2961291) | Cod sursa (job #2662869) | Cod sursa (job #2348855)
#include <iostream>
#include <fstream>
#include <vector>
#define Nmax 155
#define Tmax 3505
using namespace std;
FILE* f=fopen("amenzi.in", "r");
//ifstream f("amenzi.in");
ofstream g("amenzi.out");
int n, m, k, p;
int am[Nmax][Nmax];
int a[Nmax][Tmax];
vector <pair <int, int> > v[Nmax];
vector <pair <int, int> > ::iterator it;
//<parsing>
const unsigned maxb=30000192;
char buf[maxb];
unsigned ptr=maxb;
inline unsigned getInt()
{
unsigned nr=0;
while(buf[ptr]<'0' || '9'<buf[ptr])
if(++ptr>=maxb)
fread(buf,maxb,1,f),ptr=0;
while('0'<=buf[ptr] && buf[ptr]<='9')
{
nr=nr*10+buf[ptr]-'0';
if(++ptr>=maxb)
fread(buf,maxb,1,f),ptr=0;
}
return nr;
}
//</parsing>
void read()
{
n=getInt();
m=getInt();
k=getInt();
p=getInt();
// f >> n >> m >> k >> p;
for (int i = 1, x, y, c; i <= m; i++)
{
x=getInt();
y=getInt();
c=getInt();
//f >> x >> y >> c;
v[x].push_back({y, c});
v[y].push_back({x, c});
}
for (int i = 1, x, y, c; i <= k; i++)
{
x=getInt();
y=getInt();
c=getInt();
//f >> x >> y >> c;
am[x][y]=am[y][x]=c;
}
}
void build()
{
for (int i = 2; i <= n; i++)
a[i][0]=-1;
for (int j = 1; j <= Tmax; j++)
for (int i = 1; i <= n; i++)
{
a[i][j]=a[i][j-1];
for (int k = 0, l=v[i].size(); k < l; k++)
{
int y=v[i][k].first;
int c=v[i][k].second;
if(j-c>=0 && a[y][j-c] > a[i][j])
a[i][j]=a[y][j-c];
}
if(a[i][j]!=-1) a[i][j]+=am[i][j];
}
}
void print()
{
for (int i = 1, x, y; i <= p; i++)
{
x=getInt();
y=getInt();
//f >> x >> y;
//cout << a[x][y] << '\n';
g << a[x][y] << '\n';
}
}
int main()
{
read();
build();
print();
return 0;
}