Cod sursa(job #1741280)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 13 august 2016 15:40:02
Problema Amenzi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#define MAXN 160
#define MAXT 3510
using namespace std;
vector<pair<int,int> > g[MAXN];
vector<pair<int,int> >::iterator it;
int cost[MAXT][MAXN],dp[MAXT][MAXN];
int main(){
    freopen("amenzi.in","r",stdin);
    freopen("amenzi.out","w",stdout);
    int n,m,k,p,i,j,a,b,c;
    scanf("%d%d%d%d",&n,&m,&k,&p);
    for(i=1;i<=m;i++){
        scanf("%d%d%d",&a,&b,&c);
        g[a].push_back(make_pair(b,c));
        g[b].push_back(make_pair(a,c));
    }
    for(i=1;i<=k;i++){
        scanf("%d%d%d",&a,&b,&c);
        cost[b][a]+=c;
    }
    memset(dp,-1,sizeof(dp));
    dp[0][1]=0;
    for(i=1;i<=3500;i++)
        for(j=1;j<=n;j++){
            for(it=g[j].begin();it!=g[j].end();it++)
                if(it->second<=i)
                    dp[i][j]=max(dp[i][j],dp[i-it->second][it->first]);
            dp[i][j]=max(dp[i][j],dp[i-1][j]);
            if(dp[i][j]>=0)
                dp[i][j]+=cost[i][j];
        }
    for(i=1;i<=p;i++){
        scanf("%d%d",&a,&b);
        printf("%d\n",dp[b][a]);
    }
    return 0;
}