Pagini recente » Cod sursa (job #1586727) | Cod sursa (job #2263075) | Cod sursa (job #1356829) | Cod sursa (job #327723) | Cod sursa (job #1469042)
using namespace std;
#include <stdlib.h>
#include <fstream>
FILE *f=fopen ("sate.in", "r");
ofstream g ("sate.out");
struct drum{int y,d;} *G[30001];
int n,s,d;
int dmin[30001];
int Q[30001];
int viz[30001];
void read();
void solve();
void write();
int main ()
{
read();
solve();
write();
}
void read()
{
int i,x,y,c,m;
fscanf(f,"%d%d%d%d",&n,&m,&s,&d);
for(i=1; i<=n; i++)
{
G[i]=(drum*) realloc(G[i],sizeof(drum));
G[i][0].y=0;
}
for (i=1; i<=m; i++)
{
fscanf(f,"%d%d%d",&x,&y,&c);
G[x][0].y++;
G[x]=(drum*) realloc(G[x],(G[x][0].y+1)*sizeof(drum));
G[x][G[x][0].y].y=y;
G[x][G[x][0].y].d=c;
G[y][0].y++;
G[y]=(drum*) realloc(G[y],(G[y][0].y+1)*sizeof(drum));
G[y][G[y][0].y].y=x;
G[y][G[y][0].y].d=c;
}
/*
for(i=1; i<=n; i++)
{
g<<i<<" ";
for(int j=1; j<=G[i][0].y; j++) g<<G[i][j].y<<" "<<G[i][j].d<<" ";
g<<'\n';
}
*/
}
void solve()
{
int p,u,i,x;
dmin[s]=0;
Q[0]=s;
p=u=0;
viz[s]=1;
while(p<=u && !viz[d])
{
x=Q[p++];
for(i=1; i<=G[x][0].y; i++)
if(!viz[G[x][i].y])
{
if(G[x][i].y>x) dmin[G[x][i].y]=dmin[x]+G[x][i].d;
else dmin[G[x][i].y]=dmin[x]-G[x][i].d;
viz[G[x][i].y]=1;
Q[++u]=G[x][i].y;
}
}
}
void write()
{
g<<dmin[d];
}