Cod sursa(job #2657032)

Utilizator felix24mihaiPrava Felix Mihai felix24mihai Data 9 octombrie 2020 15:50:07
Problema Sate Scor 0
Compilator cpp-32 Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <iostream>
#include <fstream>
#include <vector>
#define NMAX 30001
#define SZ(x) ((int) (x).size())
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");

int n, m, sizeOf[NMAX], start, finish, sum[NMAX];
vector< pair <int,int> > nodes[NMAX];
void read(){
    f >> n >> m >> start >> finish;
    int x, y, d;
    for (int i = 1; i <= m; i++){
        f >> x >> y >> d;
        nodes[x].push_back(make_pair(y,d));
        nodes[y].push_back(make_pair(x,d));
    }
}
bool findFinish = false;
void euler(int node){
    int i = 0;
    while (i < nodes[node].size()){
        if (findFinish == true)
            break;
        int next = nodes[node][i].first;
        if (next > node)
            sum[next] = sum[node] + nodes[node][i].second;
        else
            sum[next] = sum[node] - nodes[node][i].second;
        nodes[node].erase(nodes[node].begin() + i);
        i--;
        int index = 0;
        bool find_ = false;
        while (index < nodes[next].size() && find_ == false){
            if (nodes[next][index].first == node){
                find_ = true;
                nodes[next].erase(nodes[next].begin() + index);
            }
            index++;
        }
        i++;
        if (next == finish){
            g << sum[next] << "\n";
            findFinish = true;
            break;
        }
        else
            euler(next);
    }
}
int main()
{
    read();
    euler(1);
    return 0;
}