Cod sursa(job #2298653)

Utilizator usureluflorianUsurelu Florian-Robert usureluflorian Data 8 decembrie 2018 12:23:21
Problema Pitici Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.91 kb
//Deşteaptă-te, române, din somnul cel de moarte,
//În care te-adânciră barbarii de tirani!
//Acum ori niciodată croieşte-ţi altă soartă,
//La care să se-nchine şi cruzii tăi duşmani!
//
//Acum ori niciodată să dăm dovezi în lume
//Că-n aste mâni mai curge un sânge de roman,
//Şi că-n a noastre piepturi păstrăm cu fală-un nume
//https://Versuri.ro/w/v0l2
//Triumfător în lupte, un nume de Traian!
//
//Înalţă-ţi lata frunte şi caută-n giur de tine,
//Cum stau ca brazi în munte voinici sute de mii;
//Un glas ei mai aşteaptă şi sar ca lupi în stâne,
//Bătrâni, bărbaţi, juni, tineri, din munţi şi din câmpii!
#include <bits/stdc++.h>
#define a1 first
#define a2 second
using namespace std;
ifstream f ("pitici.in");
ofstream g ("pitici.out");
const int nmax=1133;
int n,m,k,a,b,c,x,ord[1133],nr[1133],val[1133];
bool viz[1133];
vector <int> sol[1133],v[1133];
vector < pair <int,int> > usu[1133];
multiset < pair <int,int> > ms;
void dfs(int x)
{
    viz[x]=1;
    for(int i=0;i<v[x].size();++i) if(!viz[v[x][i]]) dfs(v[x][i]);
    ord[++ord[0]]=x;
}
int main()
{
    f>>n>>m>>k;
    while(m--)
    {
        f>>a>>b>>c;
        v[a].push_back(b);
        usu[b].push_back({a,c});
    }
    dfs(1);
    sol[1].push_back(0);
    for(int i=n-1;i>=1;--i)
    {
        ms.clear();
        x=ord[i];
        for(int j=0;j<usu[x].size();++j)
        {
            nr[usu[x][j].a1]=0;
            val[usu[x][j].a1]=usu[x][j].a2;
            ms.insert({sol[usu[x][j].a1][0]+usu[x][j].a2,usu[x][j].a1});
        }
        while(sol[x].size()<k&&!ms.empty())
        {
            pair <int,int> t=*ms.begin();
            ms.erase(ms.begin());
            sol[x].push_back(t.a1);
            if(++nr[t.a2]<sol[t.a2].size()) ms.insert({sol[t.a2][nr[t.a2]]+val[t.a2],t.a2});
        }
    }
    for(int i=0;i<k;++i) g<<sol[n][i]<<' ';
    return 0;
}