Pagini recente » Cod sursa (job #3263099) | Cod sursa (job #1092981) | Cod sursa (job #3283160) | Cod sursa (job #3253306) | Cod sursa (job #2872460)
#include<bits/stdc++.h>
#define INF 1000000000
using namespace std;
ifstream f("gather.in");
ofstream g("gather.out");
int k,n,m,p[20],d[755][17];///d[i][j]=sunt in nodul i si am adunat j detinuti + gigel
struct elem
{
int prim,sec,th;
};
vector<elem>v[755];
queue<elem>q;
void dijkstra(int x)
{
int i,j,nod,dist,det,nod2,di,nrc,val,dprim;
for(i=1;i<=n;i++)
for(j=1;j<=k;j++)
d[i][j]=INF;
d[1][1]=0;
q.push({1,0,1});
while(!q.empty())
{
nod=q.front().prim;
dist=q.front().sec;
det=q.front().th;
q.pop();
for(auto it:v[nod])
{
nod2=it.prim;
di=it.sec;
nrc=it.th;
if(det-1<=nrc)
{
val=det;
if(p[nod2]==1)
val++;
dprim=dist+di*val;
if(d[nod2][val]>dprim)
{
d[nod2][val]=dprim;
q.push({nod2,dprim,val});
}
}
}
}
int mini=INF;
for(i=1;i<=n;i++)
{
mini=min(mini,d[i][k]);
}
g<<mini;
}
int main()
{
int x,y,cond,d,i;
f>>k>>n>>m;
for(i=1;i<=k;i++)
{
f>>x;
p[x]=1;
}
for(i=1;i<=m;i++)
{
f>>x>>y>>d>>cond;
v[x].push_back({y,d,cond});
}
dijkstra(1);
return 0;
}