Cod sursa(job #2872460)

Utilizator Theo14Ancuta Theodor Theo14 Data 17 martie 2022 06:40:37
Problema Gather Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#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;
}