Cod sursa(job #276897)

Utilizator M@2Te4iMatei Misarca M@2Te4i Data 11 martie 2009 13:18:46
Problema Amenzi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 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;
}