Cod sursa(job #161079)

Utilizator tm_raduToma Radu tm_radu Data 17 martie 2008 16:50:10
Problema Pitici Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <stdio.h>
#include <set>
#include <utility>
using namespace std;

int n, m, k;
int i, j, h, g;
int nrd;
multiset<pair<int, int> > a;
multiset<pair<int, int> >::iterator it;
typedef struct nod {
    int vf, cost;
    nod* urm;
} NOD, *PNOD;
PNOD l[1001];

void Add(int i, int j, int h);   

int main()
{
    freopen("pitici.in", "r", stdin);
    freopen("pitici.out", "w", stdout);
    scanf("%d %d %d", &n, &m, &g);
    for ( h = 1; h <= m; h++ )
        scanf("%d %d %d", &i, &j, &k),
        Add(i, j, k);
    a.insert(make_pair(0, 1));
    while ( nrd < g )
    {
        it = a.begin();
        i = (*it).first, k = (*it).second;
        for ( PNOD q = l[k]; q; q = q->urm )
            a.insert(make_pair(i+(q->cost), q->vf));
        a.erase(a.begin());
        if ( k == n ) 
        {
            nrd++;
            printf("%d", i);
            if ( nrd == g ) printf("\n");
            else            printf(" ");
        }     
    }
    
    return 0;
}

void Add(int i, int j, int h)
{
    PNOD q = new NOD;
    q->vf = j;
    q->cost = h;
    q->urm = l[i];
    l[i] = q;
}