Pagini recente » Cod sursa (job #1708404) | Cod sursa (job #2425660) | Cod sursa (job #1757329) | Cod sursa (job #875038) | Cod sursa (job #2915817)
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
FILE *fin, *fout;
struct edge
{
int dest, cost;
};
#define NMAX 30000
int d[NMAX + 5];
queue <int> q;
vector <edge> graph[NMAX + 5];
void bfs(int nod)
{
d[nod] = 0;
q.push(nod);
while(!q.empty())
{
nod = q.front();
q.pop();
for(int i = 0; i < graph[nod].size(); i++)
{
int neigh = graph[nod][i].dest;
int cost = graph[nod][i].cost;
if(d[neigh] == -1 or d[nod] + cost < d[neigh])
{
d[neigh] = d[nod] + cost;
q.push(neigh);
}
}
}
}
int main()
{
fin = fopen("sate.in", "r");
fout = fopen("sate.out", "w");
int n, m, x, y;
fscanf(fin, "%d%d%d%d", &n, &m, &x, &y);
int u, v, cost, i;
edge a_node;
for(i = 0; i < m; i++)
{
fscanf(fin, "%d%d%d", &u, &v, &cost);
a_node.dest = v;
a_node.cost = cost;
graph[u].push_back(a_node);
a_node.dest = u;
a_node.cost = -cost;
graph[v].push_back(a_node);
}
/*for(int i = 1; i <= n; i++)
{
fprintf(fout , "%d: " , i);
for(auto it : graph[i])
fprintf(fout, "%d %d ", it.dest , it.cost);
fprintf(fout, "\n");
}*/
for(i = 1; i <= n; i++)
if(d[i] == 0)
d[i] = -1;
bfs(x);
//for(i = 1; i <= n; i++)
// fprintf(fout, "%d ", d[i]);
fprintf(fout, "%d", d[y]);
fclose(fin);
fclose(fout);
return 0;
}