Pagini recente » Cod sursa (job #2169884) | Cod sursa (job #263579) | Cod sursa (job #2117147) | Cod sursa (job #3165320) | Cod sursa (job #831643)
Cod sursa(job #831643)
#include <fstream>
using namespace std;
const int Nmax = 200;
const int Mmax = 2000;
const int Tmax = 4000;
const int T = 3500;
int Edge[2][Mmax],Cost[Mmax];
int V[Tmax][Nmax],A[Tmax][Nmax];
int N,M,K,P;
ifstream F("amenzi.in");
ofstream G("amenzi.out");
int main()
{
F>>N>>M>>K>>P;
for (int i=1;i<=M;++i)
F>>Edge[0][i]>>Edge[1][i]>>Cost[i];
for (int i=M+1;i<=N+M;++i)
Edge[0][i]=Edge[1][i]=i-M,
Cost[i] = 1;
M += N;
for (int i=1,a,b,c;i<=K;++i)
{
F>>a>>b>>c;
V[b][a] += c;
}
for (int i=0;i<=T;++i)
for (int j=1;j<=N;++j)
A[i][j] = -1;
A[0][1]=0;
for (int i=0;i<=T;++i)
{
for (int j=1;j<=M;++j)
for (int k=0;k<2;++k)
if ( i-Cost[j] >= 0 )
if ( A[ i-Cost[j] ][ Edge[k^1][j] ] != -1 )
A[i][ Edge[k][j] ] = max( A[i][ Edge[k][j] ] , A[ i-Cost[j] ][ Edge[k^1][j] ] );
for (int j=1;j<=N;++j)
A[i][j] += ( A[i][j] >= 0 ) ? V[i][j] : 0;
}
for (int i=1,a,b;i<=P;++i)
{
F>>a>>b;
G<<A[b][a]<<'\n';
}
F.close();
G.close();
return 0;
}