Cod sursa(job #1112714)

Utilizator smaraldaSmaranda Dinu smaralda Data 19 februarie 2014 23:01:23
Problema PScNv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;

const int KMAX = 1000, NMAX = 25e4, INF = 2e9;

struct EDGE {
    int node, k;
    EDGE (int node = 0, int k = 0) {
        this->node = node;
        this->k = k;
    }
};

vector <EDGE> graph[NMAX + 5];
vector <EDGE>::iterator itEdge;
vector <int>::iterator itInt;
vector <int> cost[NMAX + 5];
int n, m, start, fin, dmin[NMAX + 5];

void read() {
    char ln[20];
    int i, len, x, y, k;

    scanf("%d%d%d%d\n",&n,&m,&start,&fin);
    for(i = 1; i <= m; i++) {
        gets(ln);
        sscanf(ln,"%d%d%d",&x,&y,&k);
        graph[x].push_back(EDGE(y,k));
    }
}

void dijkstra () {
    int c, node;

    for(node = 1; node <= n; node++)
        dmin[node] = INF;

    cost[start].push_back(start);
    dmin[start] = 0;

    for(c = 0; c <= 1000; c++) {
        for(node = 0; node < cost[c].size(); ++node)
            for(itEdge = graph[cost[c][node]].begin(); itEdge != graph[cost[c][node]].end(); itEdge++)
                if(itEdge->k < dmin[itEdge->node]) {
                    dmin[itEdge->node] = itEdge->k;
                    cost[itEdge->k].push_back(itEdge->node);
                }
    }
}

int main() {
    freopen("pscnv.in","r",stdin);
    freopen("pscnv.out","w",stdout);


    read();

    dijkstra();

    printf("%d",dmin[fin]);
    return 0;
}