Pagini recente » Cod sursa (job #2327155) | Cod sursa (job #664258) | Cod sursa (job #2569646) | Cod sursa (job #2743320) | Cod sursa (job #571445)
Cod sursa(job #571445)
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct _nod
{
int info;
long long cost;
struct _nod *adr;
} nod;
typedef struct
{
struct _nod *cap;
} list;
list A[30001];
int N;
int M;
int X;
int Y;
long long MAX = -1;
int viz[30001];
void add(int a,int b,int c)
{
nod *nou = (nod*)malloc(sizeof(nod));
nou->info = b;
nou->cost = c;
nou->adr = A[a].cap;
A[a].cap = nou;
}
void citire(void)
{
int a;
int b;
int c;
FILE *f = fopen("sate.in","r");
fscanf(f,"%d %d %d %d",&N,&M,&X,&Y);
for(int i=1;i<=M;i++)
{
fscanf(f,"%d %d %d",&a,&b,&c);
add(a,b,c);
add(b,a,c);
}
fclose(f);
}
void add2(nod*& Cf,int a,int c)
{
nod *nou = (nod*)malloc(sizeof(nod));
nou->info = a;
nou->cost = c;
nou->adr = NULL;
Cf->adr = nou;
Cf = nou;
}
void parcurgere(void)
{
nod *Ci = (nod*)malloc(sizeof(nod));
Ci->info = X;
Ci->cost = 0;
nod *Cf = Ci;
int gata = 1;
while(Ci && gata)
{
if(Ci->info == Y)
{
MAX = Ci->cost;
gata = 0;
}
nod *q = A[Ci->info].cap;
while(q)
{
if(Ci->info-q->info && !viz[q->info])
{
viz[q->info] = 1;
if(q->info<Ci->info)
add2(Cf,q->info,Ci->cost-q->cost);
else
add2(Cf,q->info,Ci->cost+q->cost);
}
q = q->adr;
}
q = Ci;
Ci = Ci->adr;
free(q);
}
}
int main()
{
FILE *f = fopen("sate.out","w");
citire();
parcurgere();
fprintf(f,"%lld",MAX);
fclose(f);
return 0;
}