Cod sursa(job #1532705)

Utilizator radu_uniculeu sunt radu radu_unicul Data 21 noiembrie 2015 16:07:13
Problema Sate Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#include<stdio.h>
#include<vector>
#include<queue>
using namespace std;
int m,n,x,y,poz;
#define DIM 100000
char buff[DIM];
void citeste(int &numar)
{
     numar = 0;
     char semn='+';
     while (buff[poz] < '0' || buff[poz] > '9')
     {
          semn = buff[poz];
          if (++poz == DIM)
               fread(buff,1,DIM,stdin),poz=0;
     }
     while ('0'<=buff[poz] && buff[poz]<='9')
     {
          numar = numar*10 + buff[poz] - '0';
          if (++poz == DIM)
               fread(buff,1,DIM,stdin),poz=0;
     }
     if (semn == '-')
          numar = -numar;
}
struct edge
{
    int dest;
    int cost;
};
vector<edge> adj[30005];
int dist[30005];
queue<int> q;
int main()
{
    int a,b,cost,front,i,d;
    freopen("sate.in","r",stdin);
    freopen("sate.out","w",stdout);
    scanf("%d %d %d %d",&n,&m,&x,&y);
    for(i=0; i<m; i++)
    {
       citeste(a);
       citeste(b);
       citeste(cost);
        scanf("%d %d %d",&a,&b,&cost);
        edge ab,ba;
        ab.dest=b;
        ab.cost=cost;
        ba.dest=a;
        ba.cost=-cost;
        adj[a].push_back(ab);
        adj[b].push_back(ba);
    }
    q.push(x);
    while(!q.empty())
    {
        front=q.front();
        q.pop();
        for(i=0; i<adj[front].size(); ++i)
        {
            int d=adj[front][i].dest;
            if(dist[d]==0)
            {
                q.push(d);
                dist[d]=dist[front]+adj[front][i].cost;
                if(d==y)
                {
                    printf("%d",dist[y]);
                    return 0;
                }
            }
        }
    }
}