Pagini recente » FMI No Stress 9 Warmup | Cod sursa (job #1435733) | Cod sursa (job #1188758) | Cod sursa (job #3275554) | Cod sursa (job #2637716)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream fin("amenzi.in");
ofstream fout("amenzi.out");
const int KMAX = 3505;
const int DIM = 155;
struct FinalNodes
{
int node,time;
}L[8005];
int n,m,k,p,x,y,c,T[DIM][KMAX],F[DIM][KMAX],root,DP[DIM][KMAX];
bool Check[DIM][KMAX];
vector < pair<int,int> > G[DIM];
void Read()
{
fin>>n>>m>>k>>p;
while(m--)
{
fin>>x>>y>>c;
G[x].push_back(make_pair(y,c));
G[y].push_back(make_pair(x,c));
}
while(k--)
{
fin>>x>>y>>c;
T[x][y]=c;
}
for(int i=1;i<=p;i++)
{
fin>>L[i].node>>L[i].time;
x=L[i].node;
y=L[i].time;
F[x][y]=1;
}
root=1;
}
void DFS(int node, int time)
{
DP[node][time]+=T[node][time];
Check[node][time]=1;
vector < pair<int,int> > ::iterator it;
for(it=G[node].begin();it!=G[node].end();it++)
{
int next=(*it).first;
int edgeCost=(*it).second;
if((DP[node][time]>DP[next][time+edgeCost] || (!DP[next][time+edgeCost])) && (time+edgeCost<=3500))
{
DP[next][time+edgeCost]=DP[node][time];
DFS(next,time+edgeCost);
}
}
}
int main()
{
Read();
DFS(root,0);
for(int i=1;i<=p;i++)
{
x=L[i].node;
y=L[i].time;
if(!Check[x][y])
fout<<-1<<'\n';
else
fout<<DP[x][y]<<'\n';
}
}