Cod sursa(job #9621)

Utilizator RAduNumele contine caractere invalide RAdu Data 27 ianuarie 2007 16:27:04
Problema Amenzi Scor 0
Compilator cpp Status done
Runda Unirea 2007, clasele 11-12 Marime 1.62 kb
#include <stdio.h>

int a[151][151], m[3501][151], u[3501][151],n,h,k,pp, t[151][3501];

int solve(){
	int i,j,k,e,timp;

    u[0][0]=1; u[0][1]=1;
    for(i=0;i<=3500;i++){
        for(j=1;j<=n;j++){

        	if (u[i][j]!=0){

        	for(k=1;k<=n;k++){
                if (a[j][k]!=0){
                    timp=i+a[j][k];
                    u[timp][k]=1;
                    if (m[timp][k]<m[i][j]+t[k][timp]) m[timp][k]=m[i][j]+t[k][timp];
                    /*if (t[k][timp]!=0){ m[timp][u[timp][0]]=m[i][j]+t[k][timp]; }*/
				}

                /*

            	if (a[u[i][j]][k]!=0){ u[i+a[u[i][j]]][0]++;
                					   u[i+a[u[i][j]][u[i+a[u[i][j]][0]]=k;
                                       if(t[k][i]!=0) m[i+a[u][i]][u[i+a[u[i][j]][0]=m[u[i][j]][j]+t[k][i];
                                     }

                */
            }
			}
		}
	}
    return 0;
}

void read(){
	freopen("amenzi.in","r",stdin);

    scanf("%d%d%d%d",&n,&h,&k,&pp);

    int i,j,d,b,c,exe,maxim;

    for(i=1;i<=h;i++){
    	scanf("%d%d%d",&d,&b,&c);
        a[d][b]=c; a[b][d]=c;
	}

    for(i=1;i<=k;i++){
    	scanf("%d%d%d",&d,&b,&c);
        t[d][b]=c;
	}

    solve();

    for(i=1;i<=pp;i++){
        scanf("%d%d",&b,&c);
        //exe=0; maxim=0;
        //for(j=1;j<=n;j++){
            if (u[c][b]!=0) printf("%d\n",m[c][b]);
            else printf("-1\n");
        //    	if (maxim<m[c][i]){ maxim=m[c][i]; exe=1; }
		//}
        //if (exe==1)printf("%d\n",maxim);
        //else printf("-1\n");
	}
}

int main(){
	freopen("amenzi.out","w",stdout);
	read();
	return 0;
}