Cod sursa(job #1600171)

Utilizator dobrebogdanDobre Bogdan Mihai dobrebogdan Data 14 februarie 2016 19:06:39
Problema Pitici Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
priority_queue<pair<int,int>, vector<pair<int,int> >, greater<pair<int,int> > > pq;
vector<pair<int,int > > ve[1025],inv[1025];
int di[1025][1025],cn[1025],k;
bool be[1025];
void calc(int x)
{
    pair<int,int> tm;
    pq.push(make_pair(1,2));
    pq.push(make_pair(2,3));
    tm=pq.top();
    pq.pop();
    pq.pop();
    be[x]=1;
    int i,j=1,sz=inv[x].size();
    for(i=sz-1;i>=0;i--)
    {
        if(be[inv[x][i].second]==0)
            calc(inv[x][i].second);
            cn[i]=1;
            pq.push(make_pair(di[inv[x][i].second][cn[i]]+inv[x][i].first,i));
    }
while(j<=k && !pq.empty())
{
    tm=pq.top();
    pq.pop();
    di[x][j]=tm.first;
    i=tm.second;
    cn[i]++;
    j++;
    if(di[inv[x][i].second][cn[i]]!=0)
    {
        pq.push(make_pair(di[inv[x][i].second][cn[i]]+inv[x][i].first,i));
    }

}
while(!pq.empty())
    pq.pop();
}
int main()
{
    freopen("pitici.in","r",stdin);
    freopen("pitici.out","w",stdout);
    int n,m,i,j,x,y,z,q=1;
    pair<int,int > tm;
    scanf("%d%d%d",&n,&m,&k);
    for(i=1;i<=m;i++)
    {
        scanf("%d%d%d",&x,&y,&z);
        ve[x].push_back(make_pair(z,y));
        inv[y].push_back(make_pair(z,x));
    }
    be[1]=1;
    for(i=2;i<=n;i++)
        if(be[i]==0)
            calc(i);
            for(i=1;i<=k;i++)
                printf("%d ",di[n][i]);
    return 0;
}