Pagini recente » Cod sursa (job #989893) | Cod sursa (job #1145950) | Cod sursa (job #2199741) | Cod sursa (job #1374969) | Cod sursa (job #1858087)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream f("amenzi.in");
ofstream g("amenzi.out");
const int maxn=152;
vector <int>G[maxn],T[maxn];
const int inf=1<<30;
int dp[maxn][3502],a[maxn][3052];
int viz[maxn];
int N,M,K,P;
int main()
{
int x,y,z,i,j,k,sz;
f>>N>>M>>K>>P;
for (i=1;i<=M;i++)
{
f>>x>>y>>z;
G[x].push_back(y);
T[x].push_back(z);
G[y].push_back(x);
T[y].push_back(z);
}
for (i=1;i<=N;i++)
{
G[x].push_back(x);
T[x].push_back(1);
}
for (i=1;i<=K;i++)
{
f>>x>>y>>z;
a[x][y]=z;
}
memset(dp, -1, sizeof(dp));
for (i=2;i<maxn;i++) viz[i]=inf;
for (i=0;i<=3500;i++)
for(j=1;j<=N;j++)
{
if (viz[j]>i) continue;
sz=G[j].size();
if (a[j][i]!=0)
{if (dp[j][i]==-1) dp[j][i]=a[j][i];
else dp[j][i]+=a[j][i];}
for (k=0;k<sz;k++)
if (i+T[j][k]<=3500) {dp[G[j][k]][i+T[j][k]]=max(dp[G[j][k]][i+T[j][k]],dp[j][i]);viz[G[j][k]]=min(viz[G[j][k]],T[j][k]+i);}
}
for (i=1;i<=P;i++)
{
f>>x>>y;
g<<dp[x][y]<<" ";
}
}