Pagini recente » Cod sursa (job #2243094) | Cod sursa (job #84359) | Cod sursa (job #880204) | Cod sursa (job #2642858) | Cod sursa (job #342124)
Cod sursa(job #342124)
#include<fstream>
#include<stdlib.h>
#define dmax 30003
using namespace std;
ifstream in("sate.in");
ofstream out("sate.out");
int n,m,a,b;
bool viz[dmax];
int* g[dmax];
long long* dist[dmax];
struct queue
{ int nod;
long long d;
} c[dmax];
void bfs()
{ int p1=0,p2=0,i,cr;
c[p1].nod=a;
c[p1].d=0;
viz[a]=1;
while(p1<=p2)
{ cr=c[p1].nod;
for(i=1;i<=g[cr][0];i++)
if(!viz[g[cr][i]])
{ p2++;
c[p2].nod=g[cr][i];
viz[g[cr][i]]=1;
if(g[cr][i]<cr)
{ c[p2].d=c[p1].d-dist[cr][i];
}
else if(g[cr][i]>cr)
{ c[p2].d=c[p1].d+dist[cr][i];
}
if(g[cr][i]==b)
{ out<<c[p2].d;
return;
//p1=p2+1;
}
}
p1++;
}
}
int main()
{ int i,x,y,t;
long long z;
in>>n>>m>>a>>b;
if(a>b)
{ t=b;
b=a;
a=t;
}
for(i=1;i<=n;i++)
{ g[i]=(int*)realloc(g[i],sizeof(int));
g[i][0]=0;
dist[i]=(long long*)realloc(dist[i],sizeof(long long));
dist[i][0]=0;
}
for(i=1;i<=m;i++)
{ in>>x>>y>>z;
g[x][0]++;
g[x]=(int*)realloc(g[x],(g[x][0]+1)*sizeof(int));
g[x][g[x][0]]=y;
g[y][0]++;
g[y]=(int*)realloc(g[y],(g[y][0]+1)*sizeof(int));
g[y][g[y][0]]=x;
dist[x][0]++;
dist[x]=(long long*)realloc(dist[x],(dist[x][0]+1)*sizeof(long long));
dist[x][dist[x][0]]=z;
dist[y][0]++;
dist[y]=(long long*)realloc(dist[y],(dist[y][0]+1)*sizeof(long long));
dist[y][dist[y][0]]=z;
}
in.close();
bfs();
out.close();
return 0;
}