Cod sursa(job #984350)

Utilizator misinozzz zzz misino Data 14 august 2013 11:43:16
Problema Pitici Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include<fstream>
#include<vector>
#include<queue>
#include<cstdio>
using namespace std;
int n,m,k,nr,a,b,c,i,j,x,y,p[1050],tp[1050],d[1050];
bool viz[1050];
vector<int>l[1050];
vector<pair<int,int> >v[1050],vt[1050];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >h;
inline void dfs(int x)
{
    viz[x]=1;
    for(unsigned int i=0;i<v[x].size();++i)
    {
        if(!viz[v[x][i].first])
        dfs(v[x][i].first);
    }
    tp[++nr]=x;
}
int main()
{
    freopen("pitici.in","r",stdin);
    freopen("pitici.out","w",stdout);
    scanf("%d%d%d",&n,&m,&k);
//    f>>n>>m>>k;
    for(i=1;i<=m;++i)
    {
        scanf("%d%d%d",&a,&b,&c);
//        f>>a>>b>>c;
        v[a].push_back(make_pair(b,c));
        vt[b].push_back(make_pair(a,c));
    }
    dfs(1);
    l[1].push_back(0);
    for(i=nr-1;i;--i)
    {
        x=tp[i];
        while(!h.empty())
        h.pop();
        for(j=0;j<vt[x].size();++j)
        {
            y=vt[x][j].first;
            d[y]=vt[x][j].second;
            p[y]=1;
            h.push(make_pair(l[y][0]+d[y],y));
        }
        for(j=1;j<=k&&!h.empty();++j)
        {
            pair<int,int>kk=h.top();
            h.pop();
            l[x].push_back(kk.first);
            if(p[kk.second]<l[kk.second].size())
            {
                h.push(make_pair(l[kk.second][p[kk.second]]+d[kk.second],kk.second));
                ++p[kk.second];
            }
        }
    }
    for(i=0;i<k;++i)
    printf("%d ",l[n][i]);
//    g<<l[n][i]<<' ';
    printf("\n");
//    g<<'\n';
    return 0;
}