Pagini recente » Cod sursa (job #2726350) | Cod sursa (job #142615) | Cod sursa (job #2576138) | Cod sursa (job #873659) | Cod sursa (job #2858214)
#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;
#define MAX_N 50001
#define INF 200000000
struct Edge{
int node,cost;
};
vector<Edge> graph[MAX_N];
queue<int> bfqueue;
int dist[MAX_N],marked[MAX_N];
int n;
void bf(int node){
int qFront;
for(int i=1;i<=n;i++){
marked[i]=false;
dist[i]=INF;
}
dist[node]=0;
bfqueue.push(node);
marked[node]=true;
while(!bfqueue.empty()){
qFront=bfqueue.front();
for(const Edge& edge : graph[qFront]){
if(dist[edge.node]>dist[qFront]+edge.cost){
dist[edge.node]=dist[qFront]+edge.cost;
if(!marked[edge.node]){
bfqueue.push(edge.node);
marked[edge.node]=true;
}
}
}
marked[qFront]=false;
bfqueue.pop();
}
}
int main(){
FILE *fin,*fout;
fin=fopen("sate.in","r");
int m,i,a,b,c,x,y;
fscanf(fin,"%d%d%d%d",&n,&m,&x,&y);
for(i=0;i<m;i++){
fscanf(fin,"%d%d%d",&a,&b,&c);
graph[a].push_back({b,c});
graph[b].push_back({a,-c});
}
fclose(fin);
bf(x);
fout=fopen("sate.out","w");
fprintf(fout,"%d ",dist[y]);
fclose(fout);
return 0;
}