Pagini recente » Cod sursa (job #1142268) | Cod sursa (job #801316) | Cod sursa (job #1866187) | Cod sursa (job #473127) | Cod sursa (job #916801)
Cod sursa(job #916801)
#include<cstdio>
#include<vector>
#include<bitset>
#include<cstring>
#define MAX_SIZE 30005
#define dist second
#define INF 1<<30
#define TYPE pair<int,int>
FILE *f=fopen("sate.in","r");
FILE *g=fopen("sate.out","w");
using namespace std;
vector <TYPE> G[MAX_SIZE];
vector<TYPE>::iterator it;
int result,dist[MAX_SIZE],a[MAX_SIZE];
int n,m,x,y;
void read( void )
{
fscanf(f,"%d%d%d%d",&n,&m,&x,&y);
for(int i(0); i < m ; ++i)
{
int s1,s2,dist;
fscanf(f,"%d%d%d",&s1,&s2,&dist);
G[s1].push_back(make_pair(s2,dist));
G[s2].push_back(make_pair(s1,-dist));
}
fclose(f);
}
void BFS()
{
int k=1;
memset(dist,-1,sizeof(dist));
dist[x]=0;
a[1]=x;
for(int i(1); i<=k; i++)
{
for(int ii(0); ii <G[a[i]].size(); ii++)
{
int node=G[a[i]][ii].first;
if(dist[node] == -1 )
{
dist[node]=G[a[i]][ii].second+dist[a[i]];
if(node == y)
return ;
a[++k]=node;
}
}
}
}
void write( void )
{
fprintf(g,"%d",dist[y]);
fclose(g);
}
int main( void )
{
read();
BFS();
write();
return 0;
}