Pagini recente » Cod sursa (job #592926) | Cod sursa (job #272404) | Cod sursa (job #1598287) | Cod sursa (job #2825454) | Cod sursa (job #85205)
Cod sursa(job #85205)
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#define infile "sate.in"
#define outfile "sate.out"
#define nmax 30001
using namespace std;
vector <int> c2;
int n, v[nmax][nmax], c[nmax][nmax], x, y, i;
long m, *dist;
void readdata()
{
FILE *fin=fopen(infile, "r");
int x2, y2;
long c2;
fscanf(fin, "%d %ld %d %d\n", &n, &m, &x, &y);
for (i=0; i<m; i++)
{
fscanf(fin, "%d %d %ld\n", &x2, &y2, &c2);
v[x2][0]++;
v[x2][v[x2][0]]=y2;
c[x2][0]++;
c[x2][c[x2][0]]=c2;
v[y2][0]++;
v[y2][v[y2][0]]=x2;
c[y2][0]++;
c[y2][c[y2][0]]=c2;
}
}
void solve(int x)
{
int u, p;
c2.push_back(x);
dist=(long *)calloc(n+2, sizeof(long));
p=u=0;
while (p <= u )
{
x=c2[p++];
for (i=1; i<=v[x][0]; i++)
if (!dist[v[x][i]])
{
c2.push_back(v[x][i]);
u++;
if (x<v[x][i])
dist[v[x][i]]=dist[x]+c[x][i];
else
dist[v[x][i]]=dist[x]-c[x][i];
}
if (dist[y]) return;
}
}
void writedata()
{
FILE *fout=fopen(outfile, "w");
fprintf(fout, "%ld", dist[y]);
fclose(fout);
}
int main()
{
readdata();
solve(x);
writedata();
return 0;
}