Cod sursa(job #1298036)

Utilizator pavlov.ionPavlov Ion pavlov.ion Data 22 decembrie 2014 15:10:10
Problema Sate Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 2.11 kb
#include<stdio.h>
#include<stdlib.h>
  int N,M,X,Y;
  int *viz,*cost;
  struct nod{
    int val;
    int cost;
    nod *next;
  };
  nod **A;
   struct queue{
        int val;
        queue *next;
    };
queue *p=NULL,*prim=NULL,*ultim=NULL;
void push(int x) {
    queue *nou;
    if(prim==NULL) {
        nou= new queue;
        nou->val=x;
        nou->next=NULL;
        prim=nou;
        ultim=nou;
    }
    else {
        nou= new queue;
        nou->val=x;
        nou->next=NULL;
        ultim->next=nou;
        ultim=nou;
    }
}
int pop() {
    int x;
    x=prim->val;
    prim=prim->next;
    return x;
}
int isEmpty() {
if (prim==NULL)
        return 0;
return 1;
}
void citire() {
    int dist;
    nod *nou;
    int i,x,y;
    scanf("%d %d %d %d",&N,&M,&X,&Y);
    A=(nod**)malloc((N+1)*sizeof(nod*));
    for(i=1;i<=N;i++)
                A[i]=NULL;
        for(i=1;i<=M;i++) {
            scanf("%d %d %d",&x,&y,&dist);
            nou=new nod;
            nou->val=y;
            nou->cost=dist;
            nou->next=A[x];
            A[x]=nou;
            nou=new nod;
            nou->val=x;
            nou->cost=dist;
            nou->next=A[y];
            A[y]=nou;
        }
    viz=(int*)calloc((N+1),sizeof(int));
    cost=(int*)malloc((N+1)*sizeof(int));
}
void bfs() {
    int i;
    int x;
    nod *q;
    for(i=1;i<=N;i++)
                cost[i]=-1;
            cost[X]=0;
            viz[X]=1;
            push(X);
        while(isEmpty()) {
            x=pop();
            q=A[x];
            while(q!=NULL) {
                if (viz[q->val]==0) {
                        push(q->val);
                        viz[q->val]=1;
                    if(x<q->val)
                        cost[q->val]=cost[x]+q->cost;
                    else
                        cost[q->val]=cost[x]-q->cost;
                }
            q=q->next;
        }
}
}
int main () {
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
int i,j;
    citire();
    bfs();
printf("%d",cost[Y]);
fclose(stdin);
fclose(stdout);
return 0;
}