Cod sursa(job #2894214)

Utilizator LianaMarialiana maria LianaMaria Data 27 aprilie 2022 15:46:03
Problema Sate Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.81 kb
#include<iostream>
#include<vector>
#include<fstream>
#include<queue>
#include<map>
#define N 100030
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");

vector < pair<int, int> > adj[N];
map<int,pair<int,int>> p;
int n, m, x, y;
long long d;

void input();
void print();
void bfs(int node);
int main() {
    

    input();
   // print();
    bfs(x);
    map<int, pair<int, int>>::iterator it;
    for (it = p.begin(); it != p.end(); ++it) {
        d = d + it->second.second;
        //cout << it->first << " " << it->second.first << " " << it->second.second << endl;
    }
    g << d << endl;
	return 0;
}
void bfs(int node) {
    queue<int> q;
    vector<bool> vis(N,0);
    q.push(node);
    vis[node] = 1;
    while (!q.empty()) {
        int nr = q.front();
        for (int i = 0; i < adj[nr].size(); ++i) { 
            if (!vis[adj[nr][i].first]) {
                vis[adj[nr][i].first] = 1;
                if (nr < adj[nr][i].first) {
                    p.insert({ adj[nr][i].first,{ nr, adj[nr][i].second } });
                }
                else {
                    p.insert({ adj[nr][i].first,{ nr, -adj[nr][i].second } });
                }
                if (adj[nr][i].first == y) {
                        return;
                  }
                q.push(adj[nr][i].first);
            }
        }
        q.pop();
    }

}
void print() {

    for (int i = 1; i <= n; i++) {
        for (int j = 0; j < adj[i].size(); ++j) {
            cout <<i<<" "<<adj[i][j].first << " " << adj[i][j].second << endl;
        }
        cout << endl;
    }
}
void input(){
    int a, b , c;
    f >> n >> m>>x>>y;
    for (int i = 1; i <= m; i++){
        f >> a >> b >> c;
        adj[a].push_back({ b, c });
        adj[b].push_back({ a, c });
    }
}