Pagini recente » Cod sursa (job #2687495) | Cod sursa (job #2328963) | Cod sursa (job #707045) | Cod sursa (job #396301) | Cod sursa (job #791503)
Cod sursa(job #791503)
#include<fstream>
#include<vector>
#include<cmath>
#include<cstring>
using namespace std;
int n,m,K,Q;
struct Muchie{int nod,timp;};
vector <Muchie> G[160];
int best[160][3510],amenda[160][3510];
int main()
{
int i,j,x,y,c,ns,poz;
Muchie aux;
vector <Muchie>::iterator it;
char s[50];
ifstream fin("amenzi.in");
ofstream fout("amenzi.out");
fin>>n>>m>>K>>Q;
fin.getline(s,50);
for(i=1;i<=m;i++)
{
fin.getline(s,50);
ns=strlen(s);
poz=0;
x=y=c=0;
while(s[poz]!=' ')
x=x*10+s[poz++]-'0';
poz++;
while(s[poz]!=' ')
y=y*10+s[poz++]-'0';
poz++;
while(poz<ns)
c=c*10+s[poz++]-'0';
//fin>>x>>y>>c;
aux.nod=y;
aux.timp=c;
G[x].push_back(aux);
aux.nod=x;
G[y].push_back(aux);
}
for(i=1;i<=K;i++)
{
fin.getline(s,50);
ns=strlen(s);
poz=0;
x=y=c=0;
while(s[poz]!=' ')
x=x*10+s[poz++]-'0';
poz++;
while(s[poz]!=' ')
y=y*10+s[poz++]-'0';
poz++;
while(poz<ns)
c=c*10+s[poz++]-'0';
//fin>>x>>y>>c;
amenda[x][y]+=c;
}
for(i=1;i<=n;i++)
best[i][0]=-1;
best[1][0]=amenda[1][0];
for(i=1;i<=3505;i++)
{
for(j=1;j<=n;j++)
{
best[j][i]=-1;
for(it=G[j].begin();it!=G[j].end();it++)
{
aux=*it;
if(i>=aux.timp)
best[j][i]=max(best[j][i],best[aux.nod][i-aux.timp]);
}
best[j][i]=max(best[j][i],best[j][i-1]);
if(best[j][i]>=0)
best[j][i]+=amenda[j][i];
}
}
for(i=1;i<=Q;i++)
{
fin.getline(s,50);
ns=strlen(s);
poz=0;
x=y=0;
while(s[poz]!=' ')
x=x*10+s[poz++]-'0';
poz++;
while(poz<ns)
y=y*10+s[poz++]-'0';
//fin>>x>>y;
fout<<best[x][y]<<"\n";
}
fin.close();
fout.close();
return 0;
}