P14548 [IO 2024 #3] 拯救波利尼西亚
本人小蒟蒻,这是我的第一篇题解。希望管理员大大给过。
先按照权值
用并查集维护:
献上本蒟蒻弱弱的代码,大佬轻喷:
int n, m, p[N], res;
struct tt {
int l, r, w;
}ed[N];
int find(int x) {
if (p[x] != x) p[x] = find(p[x]);
return p[x];
}
signed main() {
cin >> n >> m;
rep(i, 1, m) cin >> ed[i].l >> ed[i].r >> ed[i].w;
sort(ed + 1, ed + m + 1, [](tt x, tt y) {
return x.w < y.w;
});
rep(i, 1, n) p[i] = i;
rep(i, 1, m) {
int l = ed[i].l, r = ed[i].r, w = ed[i].w;
res += w;
if (find(l) >= r) continue;
int tmp = l;
while (1) {
tmp = find(tmp);
if (tmp >= r) break;
res += w;
int fx = find(tmp), fy = find(tmp + 1);
p[fx] = fy;
tmp++;
}
}
int cnt = 0;
rep(i, 1, n) if (find(i) == i) cnt++;
if (cnt > 1) puts("-1");
else cout << res << endl;
}
哎,提高组不理想的我该何去何从呢?NOIP 能拿下 400 吗?qwq