Pagini recente » Cod sursa (job #2254364) | Cod sursa (job #2647982) | Cod sursa (job #1213727) | Cod sursa (job #1041374) | Cod sursa (job #1152966)
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#define NMAX 30040
using namespace std;
int n,x,y,dist[NMAX];
vector<pair<int,int> >G[NMAX];
vector<pair<int,int> >::iterator it;
queue <int> C;
bool viz[NMAX];
void reading(int &n,int &x,int &y)
{
int i,m,nod1,nod2,d;
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
scanf("%d %d %d %d",&n,&m,&x,&y);
for(i=1;i<=m;++i)
{
scanf("%d %d %d",&nod1,&nod2,&d);
G[nod1].push_back(make_pair(nod2,d));
G[nod2].push_back(make_pair(nod1,d));
}
}
void init_data()
{
for(int i=1;i<=n;++i) viz[i]=0;
}
void dfs()
{
int nod;
bool stop=0;
C.push(x);
viz[x]=1;
while(!stop)
{
nod=C.front();C.pop();
for(it=G[nod].begin();it!=G[nod].end();++it)
if (!viz[it->first])
{
if (nod==x)
{
dist[it->first]=it->second;
C.push(it->first);
viz[it->first]=1;
}
else
{
if (nod<it->first) dist[it->first]=dist[nod]+it->second;
else dist[it->first]=dist[nod]-it->second;
if (it->first==y) {stop=true;break;}
C.push(it->first);
viz[it->first]=1;
}
}
}
printf("%d",dist[y]);
}
int main()
{
reading(n,x,y);
dfs();
return 0;
}