Language: C++

#include <bits/stdc++.h>
 
using namespace std;
 
#define MAX 110
#define INF INT_MAX
typedef pair<int, int> pii;

struct Edge {
    int from, to, cost;
    Edge(int from, int to, int cost) :
        from(from), to(to), cost(cost) {}
};

int N, M;
vector<Edge> G[MAX], cycle;

int color[MAX];
 
void dfs(int v, vector<Edge> u)javascript:void(0)
{
    color[v] = 0;
    for(int i = 0; i < (int)G[v].size(); i++) {
        Edge &e = G[v][i];
        int to = e.to;
        if (color[to] == -1) {
            u.push_back(G[v][i]);
            dfs(to, u);
            u.pop_back();
        } else if(color[to] == 0) {
            color[to] = 1;
            u.push_back(G[v][i]);
            cycle = u;
            u.pop_back();
            throw 0;
        }
    }
    color[v] = 1;
}

bool solve()
{
    vector<Edge> vec;
    memset(color, -1, sizeof(color));
    for (int i = 0; i < N; i++) {
        try {
            if (color[i] == -1) {
                dfs(i, vec);
            }
        } catch (...) {
            break;
        }
        vec.clear();
    }
    return (cycle.size() > 0);
}

void init()
{
    cycle.clear();
    for (int i = 0; i < MAX; i++) {
        G[i].clear();
    }
}

class Union_Find {
  public:
    int par[MAX], rank[MAX], size[MAX], gnum;
    
    Union_Find(int N) {
        gnum = N;
        for (int i = 0; i < N; i++) {
            par[i] = i;
            rank[i] = 0;
            size[i] = 1;
        }
    }

    int find(int x)
    {
        if (par[x] == x) {
            return x;
        }
        return par[x] = find(par[x]);
    }

    void unite(int x, int y)
    {
        x = find(x);
        y = find(y);
        if (x == y) return;
        
        if (rank[x] < rank[y]) {
            par[x] = y;
            size[y] += size[x];
        } else {
            par[y] = x;
            size[x] += size[y];
            if (rank[x] == rank[y]) {
                rank[x]++;
            }
        }
        gnum--;
    }

    bool same(int x, int y)
    {
        return (find(x) == find(y));
    }

    int getSize(int x)
    {
        return size[find(x)];
    }

    int groups()
    {
        return gnum;
    }
};

int main()
{
    int s, t, cost;
    while (cin >> N >> M, N) {
        int min_cost = 0, min_cost2 = INF;
        init();
        Union_Find uf(N);
        for (int i = 0; i < M; i++) {
            cin >> s >> t >> cost;
            if (cost > 0) {
                G[s].push_back(Edge(s, t, cost));
                uf.unite(s, t);
                min_cost2 = min(min_cost2, cost);
            } else {
                min_cost += cost;
            }                
        }
        
        if (uf.gnum == 1) {
            if (solve()) {
                min_cost2 = INF;
                set<pii> st;
                vector<int> v;
                for (int i = 0; i < (int)cycle.size(); i++) {
                    v.push_back(cycle[i].cost);
                    st.insert(pii(cycle[i].from, cycle[i].to));
                }
                sort(v.begin(), v.end());
                min_cost2 = v[0] + v[1];
                for (int i = 0; i < N; i++) {
                    for (int j = 0; j < (int)G[i].size(); i++) {
                        Edge &e = G[i][j];                    
                        if (st.count(pii(e.from, e.to)) == 0) {
                            min_cost2 = min(min_cost, e.cost + min(0, v[0]));
                        }
                    }
                }
            } 
        } else {
            min_cost2 = 0;
        }
        cout << min_cost + min_cost2 << endl;
    }
    return 0;
}

Compiler output:
a.cc:20:32: error: expected initializer before 'javascript'
   20 | void dfs(int v, vector<Edge> u)javascript:void(0)
      |                                ^~~~~~~~~~
a.cc: In function 'bool solve()':
a.cc:48:17: error: 'dfs' was not declared in this scope; did you mean 'ffs'?
   48 |                 dfs(i, vec);
      |                 ^~~
      |                 ffs