Submission #1171879

#TimeUsernameProblemLanguageResultExecution timeMemory
1171879lopkusCheap flights (LMIO18_pigus_skrydziai)C++20
0 / 100
49 ms31988 KiB
#include <bits/stdc++.h>

const int N = 2e5 + 5;

int found = 0;

int ans;

std::vector<int> adj[N];
std::vector<int> P(N);
std::vector<int> dist(N);
std::vector<int> real_dist(N);

struct DSU {
  void add(int i) {
    P[i] = i;
    adj[i].push_back(i);
    dist[i] = 0;
    real_dist[i] = 0;
  }
  void connect(int u, int v, int c) {
    if(P[u] == P[v]) {
      if(dist[u] + dist[v] == 2) {
        found = 1;
        ans = std::max(ans, real_dist[u] + real_dist[v] + c);
      }
      return;
    }
    u = P[u];
    v = P[v];
    if(adj[u].size() > adj[v].size()) {
      std::swap(u, v);
    }
    for(int i = 0; i < adj[u].size(); i++) {
      int node = adj[u][i];
      dist[node] += 1;
      real_dist[node] += c;
      adj[v].push_back(node);
      P[node] = v;
    }
    adj[u].clear();
  }
}dsu;

int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  int n, m;
  std::cin >> n >> m;
  std::vector<std::pair<int,int>> g[n + 1];
  std::vector<std::array<int, 3>> edges;
  for(int i = 1; i <= m; i++) {
    int u, v, c;
    std::cin >> u >> v >> c;
    g[u].push_back({v, c});
    g[v].push_back({u, c});
    edges.push_back({c, u, v});
  }
  for(int i = 1; i <= n; i++) {
    int sum = 0;
    for(auto [y, c] : g[i]) {
      sum += c;
    }
    ans = std::max(ans, sum);
  }
  for(int i = 1; i <= n; i++) {
    dsu.add(i);
  }
  sort(edges.rbegin(), edges.rend());
  for(auto [c, u, v] : edges) {
    dsu.connect(u, v, c);
    if(found) {
      break;
    }
  }
  std::cout << ans;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...