Pagini recente » Cod sursa (job #2944994) | Cod sursa (job #540115) | Cod sursa (job #1958524) | Cod sursa (job #3180183) | Cod sursa (job #1482922)
#include <cstdio>
#include <queue>
#include <cstdlib>
#include <cstring>
using namespace std;
const int MAXN = 30005;
int viz[MAXN], sum[MAXN], deg[MAXN], *graf[MAXN], *pond[MAXN];
int n, m, x,y;
void read()
{
freopen("sate.in", "r", stdin);
scanf("%d %d %d %d", &n, &m, &x, &y);
for(; m > 0; --m){
int i, j;
scanf("%d %d", &i, &j);
++deg[i];
++deg[j];
}
for(int i = 1; i <= n; ++i){
graf[i] = (int*) malloc(deg[i]*sizeof(int));
pond[i] = (int*) malloc(deg[i]*sizeof(int));
}
fseek(stdin,0, SEEK_SET);
memset(deg,0,(n+1)*sizeof(int));
scanf("%d %d %d %d", &n, &m, &x, &y);
for(int i = 0; i < m; ++i){
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
graf[a][deg[a]] = b;
graf[b][deg[b]] = a;
pond[a][deg[a]++] = c;
pond[b][deg[b]++] = c;
}
}
void release(){
for(int i = 1; i <= n; ++i)
{
free(graf[i]);
free(pond[i]);
}
}
void bf(int rad)
{
queue <int> coada;
coada.push(rad);
viz[rad] = 1;
int capat2 = 0;
while(!coada.empty())
{
rad = coada.front();
coada.pop();
int dim = deg[rad];
for(int i = 0; i < dim; ++i)
{
capat2 = graf[rad][i];
if(!viz[capat2])
{
coada.push(capat2);
viz[capat2] = 1;
if(rad < capat2)
sum[capat2] = sum[rad] + pond[rad][i];
else
sum[capat2] = sum[rad] - pond[rad][i];
if (capat2 == y)
return ;
}
}
}
}
int main()
{
freopen("sate.out", "w", stdout);
read();
bf(x);
printf("%d", sum[y]);
release();
return 0;
}