Cod sursa(job #2348854)

Utilizator Anastasia11Susciuc Anastasia Anastasia11 Data 20 februarie 2019 01:13:44
Problema Amenzi Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.96 kb
#include <iostream>
#include <fstream>
#include <vector>
#define Nmax 155
#define Tmax 3505

using namespace std;

FILE* f=fopen("amenzi.in", "r");
//ifstream f("amenzi.in");
ofstream g("amenzi.out");

int n, m, k, p;
int am[Nmax][Nmax];
int a[Nmax][Tmax];
vector <pair <int, int> > v[Nmax];
vector <pair <int, int> > ::iterator it;

//<parsing>
const unsigned maxb=300;
char buf[maxb];
unsigned ptr=maxb;

inline unsigned getInt()
{
    unsigned nr=0;
	while(buf[ptr]<'0' || '9'<buf[ptr])
		if(++ptr>=maxb)
			fread(buf,maxb,1,f),ptr=0;
	while('0'<=buf[ptr] && buf[ptr]<='9')
    {
		nr=nr*10+buf[ptr]-'0';
		if(++ptr>=maxb)
			fread(buf,maxb,1,f),ptr=0;
	}
	return nr;
}
//</parsing>

void read()
{
    n=getInt();
    m=getInt();
    k=getInt();
    p=getInt();
   // f >> n >> m >> k >> p;
    for (int i = 1, x, y, c; i <= m; i++)
    {
        x=getInt();
        y=getInt();
        c=getInt();
        //f >> x >> y >> c;
        v[x].push_back({y, c});
        v[y].push_back({x, c});
    }
    for (int i = 1, x, y, c; i <= k; i++)
    {
        x=getInt();
        y=getInt();
        c=getInt();
        //f >> x >> y >> c;
        am[x][y]=am[y][x]=c;
    }
}

void build()
{
    for (int i = 2; i <= n; i++)
        a[i][0]=-1;
    for (int j = 1; j <= Tmax; j++)
        for (int i = 1; i <= n; i++)
        {
            a[i][j]=a[i][j-1];
            for (int k = 0, l=v[i].size(); k < l; k++)
            {
                int y=v[i][k].first;
                int c=v[i][k].second;
                if(j-c>=0 && a[y][j-c] > a[i][j])
                    a[i][j]=a[y][j-c];
            }
            if(a[i][j]!=-1) a[i][j]+=am[i][j];
        }

}

void print()
{
    for (int i = 1, x, y; i <= p; i++)
	{
	    x=getInt();
        y=getInt();
		//f >> x >> y;
		//cout << a[x][y] << '\n';
		g << a[x][y] << '\n';
	}
}

int main()
{
    read();
    build();
    print();
    return 0;
}