Cod sursa(job #2206615)

Utilizator sergiudnyTritean Sergiu sergiudny Data 23 mai 2018 08:37:27
Problema Drumuri minime Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <bits/stdc++.h>
#define DM 1505
#define pb push_back
#define pii pair<int,int>
#define x first
#define y second
#define INF 0x3f3f3f3f
using namespace std;
ifstream fin("dmin.in");
ofstream fout("dmin.out");

struct mch{int fiu,cst;};
vector<mch>G[DM];
priority_queue<pii>Q;
int ans[DM],mnCost[DM],a,b,c,n,m;

int main()
{
    fin>>n>>m;
    while(m--){
        fin>>a>>b>>c;
        G[a].pb({b,c});
        G[b].pb({a,c});
    }
    memset(mnCost,INF,sizeof(mnCost));
    Q.push({1,1});
    while(!Q.empty()){
        int nod = Q.top().y;
        int cst = Q.top().x;
        Q.pop();

        if(cst > mnCost[nod]) continue;
        if(cst == mnCost[nod]) ans[nod]++;
        if(cst < mnCost[nod]) mnCost[nod]=cst,ans[nod]=1;

        for(auto i:G[nod]) Q.push({cst*i.cst,i.fiu});
    }
    for(int i=2;i<=n;++i) fout<<ans[i]<<" ";
    return 0;
}