Cod sursa(job #3230172)

Utilizator Octa-pe-infoNechifor Octavian Octa-pe-info Data 19 mai 2024 17:46:28
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.15 kb
#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;
}
*/