Pagini recente » Cod sursa (job #3234808) | Cod sursa (job #1387100) | Cod sursa (job #264534) | Cod sursa (job #2950851) | Cod sursa (job #1469030)
using namespace std;
#include <fstream>
#include <stdlib.h>
ifstream f ("sate.in");
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;
f>>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++)
{
f>>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];
}