Submission #2477443


Source Code Expand

#include<bits/stdc++.h>
using namespace std;
using ll = long long;

const int N = 2e5;
vector<int> c(N);
vector<int> used(N);
vector<int> gg[N];
int n, m, k;
void dfs(int i, int &un) {
  used[i] = 1;
  if(i < n && c[i] == 0) un++;
  for(int j : gg[i]) if(!used[j]) {
    dfs(j, un);
  }
}

/// --- Union Find Library {{{ ///

struct UF {
  int n;
  vector<int> par, rank;
  UF(int n): n(n), par(n, -1), rank(n, 0) {}
  int find(int x) {
    return par[x] < 0 ? x : par[x] = find(par[x]);
  }
  int size(int x) {
    return -par[find(x)];
  }
  bool same(int a, int b) {
    return find(a) == find(b);
  }
  void unite(int a, int b) {
    a = find(a);
    b = find(b);
    if(a == b) return;
    if(rank[a] > rank[b]) swap(a, b);
    par[b] += par[a];
    par[a] = b;
    if(rank[a] == rank[b]) rank[b]++;
  }
};

/// }}}--- ///

vector<tuple<int, int, int>> g;
ll solve() {
  ios::sync_with_stdio(false), cin.tie(0);
  cin >> n >> m >> k;
  set<int> cols;
  for(int i = 0; i < n; i++) cin >> c[i], cols.emplace(c[i]);
  for(int i = 0; i < m; i++) {
    int a, b, w;
    cin >> a >> b >> w;
    a--; b--;
    gg[a].emplace_back(b);
    gg[b].emplace_back(a);
    g.emplace_back(w, a, b);
    if(c[a]) g.emplace_back(0, a, n + c[a]);
    if(c[b]) g.emplace_back(0, b, n + c[b]);
  }

  int forests = 0;
  int no = 0;
  int fre = 0;
  for(int i = 0; i < n; i++) if(!used[i]) {
    int x = 0;
    dfs(i, x);
    if(x == 0) no++;
    fre += x;
  }
  if(no >= 2) return -1;
  if(fre < forests - 1 + (k - cols.size())) return -1;

  sort(begin(g), end(g));
  UF uf(n + k + 10);
  int cnt = 0;
  ll ans = 0;
  for(auto e : g) {
    int w = get<0>(e), a = get<1>(e), b = get<2>(e);
    if(uf.same(a, b)) continue;
    uf.unite(a, b);
    if(w) cnt++, ans += w;
    if(cnt == k - 1) break;
  }
  return ans;
}

int main() {
  cout << solve() << endl;
}

Submission Info

Submission Time
Task A - Colorful MST
User luma
Language C++14 (GCC 5.4.1)
Score 0
Code Size 1936 Byte
Status WA
Exec Time 106 ms
Memory 20272 KB

Judge Result

Set Name Sample Subtask1 Subtask2 Subtask3 Subtask4
Score / Max Score 0 / 0 0 / 100 0 / 100 0 / 200 0 / 300
Status
WA × 4
AC × 4
WA × 3
AC × 6
WA × 6
AC × 5
WA × 2
AC × 15
WA × 13
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 WA 4 ms 6528 KB
00_example_02.txt WA 4 ms 6528 KB
00_example_03.txt WA 4 ms 6528 KB
00_example_04.txt WA 4 ms 6528 KB
s1_01.txt AC 4 ms 6528 KB
s1_02.txt AC 88 ms 20144 KB
s1_03.txt WA 4 ms 6528 KB
s1_04.txt WA 4 ms 6528 KB
s1_05.txt AC 57 ms 14388 KB
s1_06.txt AC 87 ms 20272 KB
s2_07.txt AC 14 ms 8124 KB
s2_08.txt AC 91 ms 20272 KB
s2_09.txt WA 54 ms 15664 KB
s2_10.txt WA 48 ms 12080 KB
s2_11.txt WA 82 ms 17200 KB
s2_12.txt WA 77 ms 17584 KB
s3_13.txt AC 12 ms 7424 KB
s3_14.txt WA 72 ms 12852 KB
s3_15.txt AC 55 ms 10804 KB
s3_16.txt AC 52 ms 10676 KB
s3_17.txt AC 70 ms 12468 KB
s3_18.txt AC 68 ms 11956 KB
s4_19.txt WA 14 ms 7740 KB
s4_20.txt WA 79 ms 14132 KB
s4_21.txt AC 77 ms 12848 KB
s4_22.txt AC 77 ms 13488 KB
s4_23.txt AC 88 ms 15412 KB
s4_24.txt AC 106 ms 15024 KB