Pagini recente » Cod sursa (job #208796) | Cod sursa (job #209073) | Cod sursa (job #2937364) | Cod sursa (job #881783) | Cod sursa (job #276141)
Cod sursa(job #276141)
#include<stdio.h>
#include<vector>
#include<string>
using namespace std;
FILE*fin=fopen("sate.in","r");
FILE*fout=fopen("sate.out","w");
#define nm 30005
#define mkp make_pair
#define pb push_back
#define f first
#define s second
int n,m,x,y,f[nm],q[nm],cm[nm],viz[nm],next[nm];
vector<pair<int,int> >g[nm];
inline void bf()
{
q[0]=1;q[1]=x;cm[1]=0;f[1]=0;
memset(viz,0,sizeof(viz));
viz[x]=1;
int i=1,nod,nnod,j;
while(i<=q[0])
{
nod=q[i];
for(j=0;j<g[nod].size();j++)
{
nnod=g[nod][j].f;
if(viz[nnod]) continue;
viz[nnod]=1;
q[0]++;
q[q[0]]=nnod;
f[q[0]]=i;
cm[q[0]]=g[nod][j].s;
if(nnod==y) return ;
}
i++;
}
}
int main()
{
int ans=0,i,a,b,c,nod,last;
fscanf(fin,"%d%d%d%d",&n,&m,&x,&y);
if(y<x) x^=y^=x^=y;
for(i=1;i<=m;i++)
{
fscanf(fin,"%d%d%d",&a,&b,&c);
g[a].pb(mkp(b,c));
g[b].pb(mkp(a,c));
}
bf();
nod=q[0];
while(nod!=1)
{
next[f[nod]]=nod;
nod=f[nod];
}
nod=1;
last=0;
next[q[0]]=q[0]+1;
while(nod<=q[0])
{
if(q[nod]>last) ans+=cm[nod];
else ans-=cm[nod];
last=q[nod];
nod=next[nod];
}
fprintf(fout,"%d",ans);
fclose(fin);
fclose(fout);
return 0;
}