Cod sursa(job #2026178)

Utilizator PinkiePie1189Preoteasa Mircea-Costin PinkiePie1189 Data 23 septembrie 2017 21:06:06
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include<stdio.h>
#include<vector>
#define MAXV 30000
#define MAXE 100024
#define MASK 32767
struct Edge
{
    int MIN,MAX,COST;
};
void dfs(int nod,int dist);
FILE*fin,*fout;
Edge edges[MAXE+1];
bool visited[MAXE+1];
std::vector<int> neighbors[MAXV+1];
int V,E,X,Y;
int ans;
int main()
{
    fin=fopen("sate.in","r");
    fout=fopen("sate.out","w");
    fscanf(fin,"%d%d%d%d",&V,&E,&X,&Y);
    for(int i=1;i<=E;i++)
    {
        int left,right,dist;
        fscanf(fin,"%d%d%d",&left,&right,&dist);
        neighbors[left].push_back(i);
        neighbors[right].push_back(i);
        edges[i].MIN=left;
        edges[i].MAX=right;
        edges[i].COST=dist;
    }
    dfs(X,0);
    fprintf(fout,"%d",ans);
    fclose(fin);
    fclose(fout);
}
void dfs(int nod,int dist)
{
    if(nod==Y)
    {
        ans=dist;
    }
    for(int i=0;i<neighbors[nod].size();i++)
    {
        int muchie=neighbors[nod][i];
        if(!visited[muchie])
        {
            visited[muchie]=1;
            if(edges[muchie].MIN==nod)
            {
                dfs(edges[muchie].MAX,dist+edges[muchie].COST);
            }
            else
            {
                dfs(edges[muchie].MIN,dist-edges[muchie].COST);
            }
        }
    }
}