#include #include #include #include struct item{ int next = -1; int prev = -1; std::map v, w; }; int main(){ int n, m; std::cin >> n >> m; std::vector items(n); for(int i = 0; i < m; ++i){ int a, b, s; std::cin >> a >> b >> s; items[a].v[s] = b; items[a].w[b] = s; } std::set undeterminates; for(int i = 0; i < n; ++i){ int b = items[i].v.rend()->second; if(items[b].prev == -1){ items[i].next = b; items[b].prev = i; } undeterminates.insert(i); } while(undeterminates.size() > 1){ auto next_undeterminates = undeterminates; for(auto i : undeterminates){ int a, s = -1; for(auto j : undeterminates){ if(i == j){ continue; } int s_ = 0; if(items[i].w.find(j) != items[i].w.end()){ s_ = items[i].w[j]; } if(s < s_){ a = j; s = s_; } } int p = items[i].next, x = 0; if(items[i].w.find(p) != items[i].w.end()){ x = items[i].w[p]; } if(s > x){ items[i].next = a; items[a].prev = i; next_undeterminates.erase(i); } } undeterminates = next_undeterminates; } int a, s = 99999; for(auto &i: items){ int s_ = 0; if(i.w.find(i.next) != i.w.end()){ s_ = i.w[i.next]; } if(s > s_){ s = s_; a = i.next; } } int acc = 0; for(int i = 0; i < n - 1; ++i){ acc += items[a].w[items[a].next]; } std::cout << acc << std::endl; return 0; }