Submission #1132821

#TimeUsernameProblemLanguageResultExecution timeMemory
1132821DangKhoizzzzKronican (COCI16_kronican)C++20
10 / 100
0 ms328 KiB
#include <bits/stdc++.h> #define ll long long #define fi first #define se second #define pii pair <int , int> #define arr3 array <int , 3> using namespace std; const int INF = 1e9 + 7; const int maxn = 2e5 + 7; struct DSU { vector <int> sz , parent; void init(int n) { sz.assign(n+1 , 0); parent.assign(n+1 , 0); for(int i = 0; i <= n; i++) { sz[i] = 1; parent[i] = i; } } int find_par(int u) { if(parent[u] == u) return u; return parent[u] = find_par(parent[u]); } void group(int u , int v) { u = find_par(u); v = find_par(v); if(u == v) return; if(sz[u] < sz[v]) swap(u , v); sz[u] += sz[v]; parent[v] = u; } bool connected(int u , int v) { return (find_par(u) == find_par(v)); } int find_size(int u) { return sz[find_par(u)]; } }; int n , k , c[40][40]; vector <array <int , 3>> edge; void solve() { cin >> n >> k; DSU dsu; dsu.init(n); for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { cin >> c[i][j]; edge.push_back({c[i][j] , i , j}); } } int ccc = n; // connected component counter int ans = 0; sort(edge.begin() , edge.end()); for(array <int , 3> e: edge) { if(ccc <= k) break; int w = e[0]; int u = e[1]; int v = e[2]; if(!dsu.connected(u , v)) { dsu.group(u , v); ans += w; ccc--; } } cout << ans << '\n'; } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...