Cod sursa(job #1155085)

Utilizator AndreiOprisanFMI - Oprisan Andrei Daniel AndreiOprisan Data 26 martie 2014 17:20:34
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<stdio.h>
#include<vector>
#include<queue>
//#include<algorithm>
using namespace std;
 
FILE*f=fopen("sate.in","r");
FILE*g=fopen("sate.out","w");
 
int c,N,M,X,Y,x,p,viz[30005],aux;
struct s{
    int vecin;
    int dist;
} y;
 
vector<s>W[30005];
queue<int>coada;
queue<int>cost;
 
int main () {
     
    fscanf(f,"%d %d %d %d",&N,&M,&X,&Y);
    int i; 
    for(i=1;i<=M;i++)
    {
        fscanf(f,"%d %d %d",&x,&y.vecin,&y.dist);
        W[x].push_back(y);
        aux = y.vecin;
        y.vecin = x; y.dist = -y.dist;
        W[aux].push_back(y);
    }
    coada.push(X);
    cost.push(0);
    viz[X] = 1;
    vector<s>::iterator itt;
     
    while ( !coada.empty() ) {
        p = coada.front();
        c = cost.front();
        if( p == Y )
            break;
        for( itt = W[p].begin() ; itt != W[p].end(); ++itt ){
            if ( ! viz[ (*itt).vecin ] ){
                viz[(*itt).vecin] = 1;
                coada.push((*itt).vecin);
                cost.push(c + (*itt).dist);
            }               
        }       
        coada.pop();
        cost.pop();
    }
     
    fprintf( g,"%d\n",c ); 
     
    fclose(f);
    fclose(g);
     
    return 0;
     
}