Cod sursa(job #918464)

Utilizator apopeid13Apopeid Alejandro apopeid13 Data 18 martie 2013 21:43:04
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<cstdio>
#include<vector>
#include<bitset>
#include<cstring>
 
#define MAX_SIZE 30005
#define dist second
#define INF 1<<30
#define TYPE pair<int,int>
 
FILE *f=fopen("sate.in","r");
FILE *g=fopen("sate.out","w");
 
using namespace std;
 
vector <TYPE> G[MAX_SIZE];
vector<TYPE>::iterator it;
int result,dist[MAX_SIZE],a[MAX_SIZE];
int n,m,x,y;
 
void read( void )
{
    fscanf(f,"%d%d%d%d",&n,&m,&x,&y);
    for(int i(0); i < m ; ++i)
    {
        int s1,s2,dist;
        fscanf(f,"%d%d%d",&s1,&s2,&dist);
         
        G[s1].push_back(make_pair(s2,dist));
        G[s2].push_back(make_pair(s1,-dist));  
         
    }
    fclose(f);
     
     
}
void BFS()
{
    int k=1;
    memset(dist,-1,sizeof(dist));
    dist[x]=0;
    a[1]=x;
    for(int i(1); i<=k; i++)
    {
        for(int ii(0); ii <G[a[i]].size(); ii++)
        {
             
            int node=G[a[i]][ii].first;
             if(dist[node] == -1 )
             {
                 dist[node]=G[a[i]][ii].second+dist[a[i]];
                 if(node == y)
                     return ;
                 a[++k]=node;
             }
             
             
             
        }
         
         
         
         
    }
     
     
}
 
void write( void )
{
    fprintf(g,"%d",dist[y]);
    fclose(g);
     
}
int main( void )
{
    read();
    BFS();
    write();
    return 0;
}