Cod sursa(job #1033517)

Utilizator ctlin04UAIC.VlasCatalin ctlin04 Data 17 noiembrie 2013 03:01:15
Problema Amenzi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<fstream>
#include<cstring>
using namespace std;
typedef struct { int x,y,c; } tip;
tip graf[3505];
int i,n,m,k,p,x,y,infr[3505][155],sol[3505][155],j,c;

int main(void) {
    ifstream fin("amenzi.in");
    ofstream fout("amenzi.out");
    fin>>n>>m>>k>>p;
    for (i=1; i<=m; ++i) fin>>graf[i].x>>graf[i].y>>graf[i].c; 
    for (i=1; i<=m; ++i) { graf[i+m].x=graf[i].y; graf[i+m].y=graf[i].x; graf[i+m].c=graf[i].c; }
    m*=2;
    for (i=1; i<=n; ++i) {
        ++m;
        graf[m].x=graf[m].y=i; graf[m].c=1;
        }    

    for (i=1; i<=k; ++i) {
          fin>>x>>y; int aux; fin>>aux; infr[y][x]+=aux;
          }
 
    for (i=2; i<=n; ++i) sol[0][i]=-1;
     
    for (i=1; i<=3500; ++i){
     memset(sol[i],-1,sizeof(sol[i]));
     for (j=1; j<=m; ++j)
          if (i-graf[j].c>=0&&sol[i-graf[j].c][graf[j].x]!=-1&&sol[i-graf[j].c][graf[j].x]+infr[i][graf[j].y]>=sol[i][graf[j].y])
            sol[i][graf[j].y]=sol[i-graf[j].c][graf[j].x]+infr[i][graf[j].y];
         }
    for (i=1; i<=p; ++i) {
         fin>>x>>y;
         fout<<sol[y][x]<<"\n";
         }
 return(0);
}