Cod sursa(job #290192)

Utilizator flamecataCiobanu Alexandru-Catalin flamecata Data 27 martie 2009 16:45:34
Problema Amenzi Scor 100
Compilator cpp Status done
Runda aa Marime 1.49 kb
#include <cstdlib>   
#include <cstdio>   
#include <cstring>   
  
int w[3502][151],x[1501],y[1501],cost[1501],am[3502][151],n,m,k,p,i,j,c,max,tt;   
int a,b;   
  
int main()   
{   
    freopen("amenzi.in","r",stdin);   
    freopen("amenzi.out","w",stdout);   
    scanf("%d%d%d%d",&n,&m,&k,&p);   
    for (i=0; i<m; ++i)   
        scanf("%d%d%d",&x[i],&y[i],&cost[i]);   
    for (i=0;i<k;++i)   
    {   
        scanf("%d%d%d",&a,&b,&c);   
        am[b][a]+=c;   
    }   
    max=3500;   
    w[0][1]=1;   
    for (tt=0;tt<=max;++tt)   
    {   
        for (i=1;i<=n;++i)   
        {   
            if (w[tt][i]!=0) w[tt][i]+=am[tt][i];   
            if (w[tt][i]>w[tt+1][i]) w[tt+1][i]=w[tt][i];   
        }   
        for (i=0;i<m;++i)   
            if (tt+cost[i]<=max)   
            {   
                if ((w[tt][x[i]]!=0)&&(w[tt][x[i]]>w[tt+cost[i]][y[i]]))   
                {   
                    w[tt+cost[i]][y[i]]=w[tt][x[i]];   
                }   
                if ((w[tt][y[i]]!=0)&&(w[tt][y[i]]>w[tt+cost[i]][x[i]]))   
                {   
                    w[tt+cost[i]][x[i]]=w[tt][y[i]];   
                }   
            }   
    }   
  
    for (i=0;i<p;++i)   
    {   
        scanf("%d %d",&a,&b);   
        printf("%d\n",w[b][a]-1);   
    }   
    /*for (int i=0; i<=50; i++)  
    {  
        for (j=1; j<=n; j++)  
            printf("%6d ",w[i][j]);  
        printf("\n");  
    }*/   
    return 0;   
}