Submission #3527316


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
using lint = long long int;
template<class T = int> using V = vector<T>;
template<class T = int> using VV = V< V<T> >;
template<class T> void assign(V<T>& v, int n, const T& a = T()) { v.assign(n, a); }
template<class T, class... Args> void assign(V<T>& v, int n, const Args&... args) { v.resize(n); for (auto&& e : v) assign(e, args...); }


struct QU {
  V<> par, rank, _size;

  QU(int n) : par(n), rank(n), _size(n, 1) { 
    iota(par.begin(), par.end(), 0);
  }

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

  bool same(int a, int b) { return find(a) == find(b); }

  int size(int a) { return _size[find(a)]; }

  void unite(int a, int b) {
    a = find(a), b = find(b);
    if (a == b) return;
    if (rank[a] < rank[b]) {
      par[a] = b;
      _size[b] += _size[a];
    } else {
      par[b] = a;
      _size[a] += _size[b];
    }
    if (rank[a] == rank[b]) rank[a]++;
  }
};

int main() {
  cin.tie(nullptr); ios_base::sync_with_stdio(false);
  int n, m, k; cin >> n >> m >> k;
  V<> c(n); for (int i = 0; i < n; ++i) cin >> c[i], --c[i];
  struct Edge { int u, v, w; };
  V<Edge> es;
  QU qu(n);
  for (int i = 0; i < m; ++i) {
    int u, v, w; cin >> u >> v >> w, --u, --v;
    es.push_back({u, v, w});
    qu.unite(u, v);
  }
  sort(begin(es), end(es), [](const Edge& lhs, const Edge& rhs) { return lhs.w < rhs.w; });
  V<> vs(n); iota(begin(vs), end(vs), 0);
  sort(begin(vs), end(vs), [&](int u, int v) { return c[u] < c[v]; });
  for (int i = 0; i < n - 1; ++i) if (c[vs[i]] != -1 and c[vs[i]] == c[vs[i + 1]]) qu.unite(vs[i], vs[i + 1]);
  set<int> sc;
  for (int i = 0; i < n; ++i) sc.insert(qu.find(i));
  int C = sc.size(), D = 0;
  for (int i = 0; i < n; ++i) D += c[i] == -1;
  set<int>().swap(sc);
  for (int i = 0; i < n; ++i) if (c[i] != -1) sc.insert(c[i]);
  int E = k - sc.size();
  if (C - 1 > D - E) return cout << -1 << '\n', 0;
  qu = QU(k + n);
  lint res = 0;
  int ce = 0;
  for (const auto& e : es) {
    int u = c[e.u] != -1 ? c[e.u] : k + e.u;
    int v = c[e.v] != -1 ? c[e.v] : k + e.v;
    if (qu.same(u, v)) continue;
    qu.unite(u, v);
    res += e.w;
    ++ce;
    if (ce == k - 1) break;
  }
  cout << res << '\n';
}

Submission Info

Submission Time
Task A - Colorful MST
User risujiroh
Language C++14 (GCC 5.4.1)
Score 700
Code Size 2330 Byte
Status AC
Exec Time 88 ms
Memory 8052 KB

Judge Result

Set Name Sample Subtask1 Subtask2 Subtask3 Subtask4
Score / Max Score 0 / 0 100 / 100 100 / 100 200 / 200 300 / 300
Status
AC × 4
AC × 7
AC × 12
AC × 7
AC × 28
Set Name Test Cases
Sample 00_example_01.txt, 00_example_02.txt, 00_example_03.txt, 00_example_04.txt
Subtask1 00_example_03.txt, s1_01.txt, s1_02.txt, s1_03.txt, s1_04.txt, s1_05.txt, s1_06.txt
Subtask2 s1_01.txt, s1_02.txt, s1_03.txt, s1_04.txt, s1_05.txt, s1_06.txt, s2_07.txt, s2_08.txt, s2_09.txt, s2_10.txt, s2_11.txt, s2_12.txt
Subtask3 00_example_02.txt, s3_13.txt, s3_14.txt, s3_15.txt, s3_16.txt, s3_17.txt, s3_18.txt
Subtask4 00_example_01.txt, 00_example_02.txt, 00_example_03.txt, 00_example_04.txt, s1_01.txt, s1_02.txt, s1_03.txt, s1_04.txt, s1_05.txt, s1_06.txt, s2_07.txt, s2_08.txt, s2_09.txt, s2_10.txt, s2_11.txt, s2_12.txt, s3_13.txt, s3_14.txt, s3_15.txt, s3_16.txt, s3_17.txt, s3_18.txt, s4_19.txt, s4_20.txt, s4_21.txt, s4_22.txt, s4_23.txt, s4_24.txt
Case Name Status Exec Time Memory
00_example_01.txt AC 1 ms 256 KB
00_example_02.txt AC 1 ms 256 KB
00_example_03.txt AC 1 ms 256 KB
00_example_04.txt AC 1 ms 256 KB
s1_01.txt AC 1 ms 256 KB
s1_02.txt AC 76 ms 8052 KB
s1_03.txt AC 1 ms 256 KB
s1_04.txt AC 1 ms 256 KB
s1_05.txt AC 57 ms 7416 KB
s1_06.txt AC 75 ms 8052 KB
s2_07.txt AC 12 ms 1088 KB
s2_08.txt AC 88 ms 6388 KB
s2_09.txt AC 42 ms 2932 KB
s2_10.txt AC 38 ms 2680 KB
s2_11.txt AC 70 ms 5108 KB
s2_12.txt AC 67 ms 4852 KB
s3_13.txt AC 9 ms 1088 KB
s3_14.txt AC 52 ms 4212 KB
s3_15.txt AC 37 ms 3060 KB
s3_16.txt AC 35 ms 3060 KB
s3_17.txt AC 50 ms 5748 KB
s3_18.txt AC 48 ms 4980 KB
s4_19.txt AC 12 ms 1472 KB
s4_20.txt AC 76 ms 6132 KB
s4_21.txt AC 46 ms 3572 KB
s4_22.txt AC 46 ms 3956 KB
s4_23.txt AC 73 ms 5748 KB
s4_24.txt AC 72 ms 6388 KB