Pagini recente » Cod sursa (job #999460) | Cod sursa (job #1315363) | Cod sursa (job #2079981) | Cod sursa (job #946704) | Cod sursa (job #1032863)
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
const int NMAX=30001,MMAX=100030;
int n,m,xs,ys;
int grf[3][NMAX+MMAX+1];
int nE;
int viz[NMAX];
void prt(){
for(int i=0;i<3;i++){
for(int j=1;j<nE;j++)
cout<<grf[i][j]<<" ";
cout<<"\n";
}
}
void gi(){
int x,y,d;
f>>n>>m>>xs>>ys;
nE=n+1;
for(int i=0;i<m;i++){
f>>x>>y>>d;
int k;
for(k=x;grf[0][k];k=grf[0][k]);
grf[0][k]=nE;
grf[1][nE]=y;
grf[2][nE++]=d;
for(k=y;grf[0][k];k=grf[0][k]);
grf[0][k]=nE;
grf[1][nE]=x;
grf[2][nE++]=(-d);
}
f.close();
}
struct{
int x,d;
}C[MMAX],c1,c2;
void srch(){
int ci,cf;
C[0].x=xs;
viz[xs]=1;
int k;
ci=cf=0;
while(ci<=cf){
c1=C[ci++];
//cout<<c1.x<<"::"<<c1.d<<"\n";
for(k=grf[0][c1.x];k;k=grf[0][k]){
if(!viz[grf[1][k]]){
c2.x=grf[1][k];
viz[c2.x]=1;
C[++cf].x=c2.x;
C[cf].d=c1.d+grf[2][k];
if(c2.x==ys){
g<<C[cf].d;
return;
}
}
}
}
}
int main(){
gi();
//prt();
srch();
g.close();
return 0;
}