Pagini recente » Cod sursa (job #2232697) | Cod sursa (job #3259494) | Cod sursa (job #586808) | Cod sursa (job #745420) | Cod sursa (job #1380311)
#include <iostream>
#include <cstdio>
#include <cstdlib>
//http://pastebin.com/FqzE82NA
using namespace std;
int main(){
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
int n,m,x,y,z,n1,n2;
cin>>n>>m>>n1>>n2;
int*** v=new int**[n+1];
for(int i=0;i<=n;i++){
v[i]=new int*[n+1];
for(int j=0;j<=n;j++){
v[i][j]=new int[2];
v[i][j][0]=v[i][j][1]=0;
}
}//initializam tot.
for(int i=0;i<m;i++){
scanf("%d %d %d",&x,&y,&z);
v[x][0][0]++;v[y][0][0]++;
v[x][v[x][0][0]][0]=y;
v[x][v[x][0][0]][1]=z;
v[y][v[y][0][0]][0]=x;
v[y][v[y][0][0]][1]=z;
}
for(int i=1;i<=n;i++)v[0][i][0]=v[i][0][0];
//LAdj
int **queue=new int*[n],*vizitat=new int[n],len=1,sol=0,i;
int *distante=new int[n];
for(i=0;i<n;i++){vizitat[i+1]=0;distante[i+1]=0;queue[i]=new int[2];};
queue[0][0]=n1;queue[0][1]=-1;vizitat[n1]=1;
for(i=0;i<len;i++){
int c=queue[i][0];
if(c==n2){sol=1;break;}
for(int j=1;j<=v[c][0][0];j++)
if(!vizitat[v[c][j][0]]){
queue[len][0]=v[c][j][0];
queue[len++][1]=i;
vizitat[v[c][j][0]]=1;
if(v[c][j][0]>c)
distante[v[c][j][0]]=v[c][j][1]+distante[c];
else
distante[v[c][j][0]]=-v[c][j][1]+distante[c];
}
}
cout<<distante[n2];
skip:
return 0;
}