Pagini recente » Cod sursa (job #224407) | Cod sursa (job #2197420) | Cod sursa (job #3182683) | Cod sursa (job #1914171) | Cod sursa (job #3230172)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
vector<vector<pair<int, int>>> tabel(30001);
vector<bool> visited(30001, false);
vector<int> dist(30001, 0);
void bfs(int start) {
queue<int> q;
q.push(start);
visited[start] = true;
dist[start] = 0;
while (!q.empty()) {
int current = q.front();
q.pop();
for (auto edge : tabel[current]) {
int neighbor = edge.first;
int weight = edge.second;
if (!visited[neighbor]) {
visited[neighbor] = true;
dist[neighbor] = dist[current] + weight;
q.push(neighbor);
}
}
}
}
int main() {
int n, m, start_node, end_node;
fin >> n >> m >> start_node >> end_node;
for (int i = 1; i <= m; i++) {
int a, b, cost;
fin >> a >> b >> cost;
tabel[a].push_back({b, cost});
tabel[b].push_back({a, -cost});
}
bfs(start_node);
fout << dist[end_node];
return 0;
}
/*
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
vector<vector<pair<int,int>>>tabel;///first==nod_c ///second==dist
vector<bool>viz;
int n,m,x,y,sum=0;
void dfs(int nod){
if(nod==y){
fout<<sum;
return;
}
viz[nod]=1;
for(auto i : tabel[nod])
if(!viz[i.first])
sum+=i.second, dfs(i.first), sum-=i.second;
}
int main()
{
fin>>n>>m>>x>>y;
if(x>y)
swap(x,y);
tabel.resize(n+1);
viz.resize(n+1,0);
for(int i=1;i<=m;i++){
int v,w,d;
fin>>v>>w>>d;
tabel[v].push_back({w,d});
}
for(int i=1;i<n;i++)
if(tabel[i].size()>1){
for(int j=0;j<tabel[i].size()-1;j++)
for(int l=j+1;l<tabel[i].size();l++)
tabel[tabel[i][j].first].push_back({tabel[i][l].first,tabel[i][l].second-tabel[i][j].second});
}
dfs(x);
return 0;
}
*/