Pagini recente » Cod sursa (job #1507560) | Cod sursa (job #2004107) | Cod sursa (job #44829) | Cod sursa (job #2064780) | Cod sursa (job #1858101)
#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][3501];
int viz[maxn];
int N,M,K,P;
int main()
{
int x,y,z,i,j,k,sz,next,timp;
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[i].push_back(i);
T[i].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;
viz[j]=0;
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++)
{
next=G[j][k];
timp=T[j][k];
if (i+T[j][k]<=3500)
{
dp[next][i+timp]=max(dp[next][i+timp],dp[j][i]);
if (viz[next]!=0) viz[next]=min(viz[next],timp+i);
}
}
}
for (i=1;i<=P;i++)
{
f>>x>>y;
g<<dp[x][y]<<"\n";
}
}