Pagini recente » Cod sursa (job #1548375) | Cod sursa (job #12847) | Cod sursa (job #1874681) | Cod sursa (job #1870119) | Cod sursa (job #1341363)
#include <cstdio>
#include <vector>
#include <queue>
#include <utility>
#define nmax 30002
#define mp make_pair
#define pb push_back
#define fs g[x][i].first
using namespace std;
FILE *f1=fopen("sate.in","r"),*f2=fopen("sate.out","w");
vector < pair < int, int > > g[nmax];
queue <int> q;
int n,m,x,y,i,t[nmax],c;
bool use[nmax];
void citire ()
{
fscanf(f1,"%d%d%d%d",&n,&m,&x,&y);
for(i=1;i<=m;i++)
{
int j,k,l;
fscanf(f1,"%d%d%d",&j,&k,&l);
g[j].pb(mp(k,l));
g[k].pb(mp(j,l));
}
}
void bfs(int x,int y)
{
q.push(x);
use[x]=1;
while(!q.empty())
{
x=q.front();q.pop();
for(int i=0;i<g[x].size();i++)
{
if(!use[fs])
{
use[fs]=true;
t[fs]=x;
q.push(fs);
}
}
}
}
int main()
{
citire();
bfs(x,y);
int tt=y;
int sc;
while(tt!=x)
{
for(i=0;i<g[tt].size();i++)
if(g[tt][i].first==t[tt])
sc=g[tt][i].second;
if(t[tt]<tt)c+=sc;
else c-=sc;
tt=t[tt];
}
int a;
fprintf(f2,"%d",c);
fclose(f1);
fclose(f2);
return 0;
}