Pagini recente » Cod sursa (job #1682215) | Cod sursa (job #1372175) | Cod sursa (job #2134331) | Cod sursa (job #1152340) | Cod sursa (job #282476)
Cod sursa(job #282476)
#include<stdio.h>
#define N 30300
#define M 100100
int n, m, x, y;
struct muchie
{
int x,y,c;
};
muchie v[M];
int *a[N], *b[N], deg[N]={0}, coada[N], d[N]={0};
void citesc(){
scanf("%d", &n);
scanf("%d", &m);
scanf("%d", &x);
scanf("%d", &y);
for(int i=1;i<=m;++i){
scanf("%d%d", &v[i].x, &v[i].y);
scanf("%d", &v[i].c);
deg[v[i].x]++;
deg[v[i].y]++;
}
int i;
fclose(stdin);
for(i=1; i<=n;++i){
a[i]=new int[deg[i]+1];
a[i][0]=0;
b[i]=new int[deg[i]+1];
b[i][0]=0;
}
}
void aloc(){
int d, e, cost;
for(int i=1;i<=m;++i){
d=v[i].x;
e=v[i].y;
cost=v[i].c;
a[e][++a[e][0]]=d;
a[d][++a[d][0]]=e;
b[e][++b[e][0]]=-cost;
b[d][++b[d][0]]=cost;
}
}
void bfs(){
int p=1, u=0, scos, ad, i;
coada[++u]=x;
d[x]=0;
while(p<=u){
scos=coada[p++];
for(i=1;i<=a[scos][0];++i)
{
ad=a[scos][i];
if(d[ad]==0)
{
coada[++u]=ad;
d[ad]=b[scos][i]+d[scos];
}
}
}
printf("%d\n",d[y]);
}
int main(){
freopen("sate.in", "r", stdin);
freopen("sate.out", "w", stdout);
citesc();
aloc();
//printf("%d", a[1][1]);
bfs();
return 0;
}