QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#387767 | #7871. 命运 | valeriu# | 15 | 44ms | 12676kb | C++20 | 4.6kb | 2024-04-12 19:49:21 | 2024-07-04 03:36:16 |
Judging History
answer
#include <bits/stdc++.h>
#define all(x) (x).begin(),(x).end()
using namespace std;
using ll = long long;
using ld = long double;
#define int ll
#define sz(x) ((int)(x).size())
using pii = pair<int,int>;
using tii = tuple<int,int,int>;
const int nmax = 5e4 + 5, inf = 1e9 + 6;
vector<pii> g[nmax];
int color[nmax];
void fill(int node, int C) {
if(color[node] != 0) return;
color[node] = C;
//cerr << node << ' ' << C << '\n';
for(auto [x, w] : g[node]) fill(x, C);
}
namespace DSU {
vector<int> neigh[nmax];
int dsu[nmax];
int atrS[nmax];
int sum[nmax];
int cc, k;
ll stdcost, supra;
void init(int n, int D, int k) {
cc = D;
stdcost = 0;
supra = 0;
for(int i = 1; i <= n; i++) dsu[i] = i, atrS[i] = inf, sum[i] = 0;
return;
}
int f(int x) { return dsu[x] == x? x : dsu[x] = f(dsu[x]); }
bool unite(int x, int y, int w) {
x = f(x);
y = f(y);
if(x == y) {
return 0;
}
if(atrS[x] != inf && atrS[y] != inf) {
if(cc <= k) return 0;
cc--;
}
//cerr << x << ' ' << y << '\t' << atrS[x] << ' ' << atrS[y] << '\t' << cc << ' ' << k << '\n';
if(atrS[x] > atrS[y]) swap(x, y);
sum[x] += sum[y];
sum[x] += w;
dsu[y] = x;
return 1;
}
int extract(int x) {
x = f(x);
for(auto& a : neigh[x])
a = f(a);
sort(all(neigh[x]), [&](int a, int b) { return atrS[a] > atrS[b]; });
while(sz(neigh[x])) {
auto b = neigh[x].back();
neigh[x].pop_back();
if(f(b) == x) continue;
return b;
}
return -1;
}
}
signed main() {
cin.tie(0) -> sync_with_stdio(0);
int n, m, k, s;
cin >> n >> m >> k >> s;
DSU::k = k;
vector<tii> edgs;
for(int i = 0, x, y, w; i < m; i++) {
cin >> x >> y >> w;
if(y == s) swap(x, y);
else if(x != s && x > y) swap(x, y);
edgs.emplace_back(x, y, w);
}
pii prv = {-1, -1};
sort(all(edgs));
for(auto [x, y, w] : edgs) {
if(prv == make_pair(x, y) && x == s) continue;
g[x].emplace_back(y, w);
g[y].emplace_back(x, w);
prv = pii{x, y};
}
color[s] = -1;
int C = 1;
for(int i = 1; i <= n; i++) {
if(color[i] == 0) fill(i, C++);
}
C--;
if(sz(g[s]) < k) {
cout << "nonnondayo\n";
return 0;
}
if(!([&]() {
vector<int> found_colors(C, 0);
for(auto [x, w] : g[s]) found_colors[color[x] - 1] = 1;
if((accumulate(all(found_colors), 0) != C) || C > k) return false;
return true;
}())) {
cout << "nonnondayo\n";
return 0;
}
sort(all(g[s]), [&](auto a, auto b) { return a.second < b.second; });
vector<int> occ(C + 1, 0);
DSU::init(n, sz(g[s]), k);
int mxS = -1;
for(auto [x, w] : g[s]) {
DSU::atrS[x] = w;
}
for(int i = 0; i < sz(edgs); i++) {
if(get<0>(edgs[i]) == s) {
swap(edgs[i], edgs.back());
edgs.pop_back();
i--;
}
}
sort(all(edgs), [&](auto a, auto b) { return get<2>(a) < get<2>(b); });
int lastw = -1;
auto process = [&](vector<tii>& candidates) {
using namespace DSU;
int C = -1;
vector<int> CD;
for(auto [x, y, w] : candidates) {
C = w;
x = f(x);
y = f(y);
if(x == y) continue;
neigh[x].emplace_back(y);
neigh[y].emplace_back(x);
CD.emplace_back(x);
CD.emplace_back(y);
}
if(C == -1) return;
assert(sz(CD) <= 2);
sort(all(CD)); CD.erase(unique(all(CD)), end(CD));
sort(all(CD), [&](int a, int b) { return atrS[a] < atrS[b]; });
for(int i = sz(CD) - 1; i >= 0; i--) {
auto b = extract(CD[i]);
if(b == -1) continue;
unite(CD[i], b, C);
}
for(auto x : CD) neigh[x].clear();
};
vector<tii> candidates;
for(auto [x, y, w] : edgs) {
//cerr << x << ' ' << y << ' ' << w << '\n';
if(w != lastw) {
//cerr << lastw << '\n';
process(candidates);
candidates.clear();
}
lastw = w;
candidates.emplace_back(x, y, w);
}
process(candidates);
ll total = 0;
for(int i = 1; i <= n; i++) {
if(i == s) continue;
if(DSU::f(i) == i) total += DSU::sum[i] + DSU::atrS[i];
}
cout << total << '\n';
}
/**
Istenem! Nu poate fi real.
-- Surse verificate
*/
详细
Subtask #1:
score: 5
Accepted
Test #1:
score: 5
Accepted
time: 25ms
memory: 12340kb
input:
49277 49276 1 49277 1 2 2000 2 3 3000 2 4 4000 3 5 5000 3 6 6000 4 7 7000 1 8 8000 7 9 9000 1 10 10000 5 11 11000 4 12 12000 3 13 13000 13 14 14000 1 15 15000 7 16 16000 11 17 17000 2 18 18000 10 19 19000 6 20 20000 4 21 21000 17 22 22000 1 23 23000 14 24 24000 4 25 25000 16 26 26000 15 27 27000 9 2...
output:
1214136002000
result:
ok single line: '1214136002000'
Test #2:
score: 0
Accepted
time: 18ms
memory: 8416kb
input:
49324 49323 1 49324 1 2 2 2 3 3 2 4 4 3 5 5 4 6 6 6 7 7 2 8 8 2 9 9 4 10 10 6 11 11 9 12 12 4 13 13 8 14 14 8 15 15 7 16 16 11 17 17 15 18 18 2 19 19 10 20 20 19 21 21 14 22 22 16 23 23 20 24 24 23 25 25 3 26 26 2 27 27 8 28 28 11 29 29 20 30 30 15 31 31 16 32 32 19 33 33 29 34 34 5 35 35 21 36 36 1...
output:
nonnondayo
result:
ok single line: 'nonnondayo'
Test #3:
score: 0
Accepted
time: 13ms
memory: 8340kb
input:
49423 49422 1 1 1 2 2 2 3 3 1 4 4 3 5 5 2 6 6 1 7 7 1 8 8 7 9 9 3 10 10 3 11 11 5 12 12 3 13 13 9 14 14 10 15 15 13 16 16 5 17 17 9 18 18 12 19 19 17 20 20 4 21 21 5 22 22 12 23 23 21 24 24 21 25 25 11 26 26 17 27 27 21 28 28 18 29 29 17 30 30 2 31 31 21 32 32 28 33 33 17 34 34 31 35 35 11 36 36 8 3...
output:
nonnondayo
result:
ok single line: 'nonnondayo'
Test #4:
score: 0
Accepted
time: 14ms
memory: 8376kb
input:
49501 49500 49501 49501 1 2 2 1 3 3 3 4 4 2 5 5 5 6 6 1 7 7 6 8 8 5 9 9 6 10 10 5 11 11 2 12 12 12 13 13 13 14 14 8 15 15 13 16 16 5 17 17 9 18 18 9 19 19 9 20 20 14 21 21 18 22 22 16 23 23 7 24 24 1 25 25 7 26 26 1 27 27 15 28 28 22 29 29 20 30 30 12 31 31 4 32 32 16 33 33 22 34 34 11 35 35 27 36 3...
output:
nonnondayo
result:
ok single line: 'nonnondayo'
Subtask #2:
score: 10
Accepted
Test #5:
score: 10
Accepted
time: 1ms
memory: 5596kb
input:
21 20 2 21 1 2 18581 1 3 9620 2 4 4362 1 5 7702 5 6 17435 4 7 11679 3 8 14832 1 9 15073 2 10 6595 5 11 19676 11 12 16943 12 13 5268 5 14 20262 8 15 8192 7 16 12340 7 17 1437 7 18 3064 2 19 10437 12 20 2882 19 21 13483
output:
nonnondayo
result:
ok single line: 'nonnondayo'
Test #6:
score: 0
Accepted
time: 1ms
memory: 5552kb
input:
10 20 4 3 1 2 18247 2 3 9041 2 4 4031 2 5 7363 3 6 17172 1 7 11014 6 8 14781 8 9 15347 8 10 6598 5 9 19331 3 10 16523 10 6 5732 2 3 20357 6 9 8827 10 3 12864 6 3 1551 5 6 3932 3 1 10223 9 3 2296 8 5 13620
output:
54418
result:
ok single line: '54418'
Test #7:
score: 0
Accepted
time: 0ms
memory: 3508kb
input:
10 20 6 10 1 2 18401 2 3 9843 3 4 4219 4 5 7552 4 6 17751 4 7 11318 5 8 14774 8 9 15541 5 10 6928 6 10 19860 10 5 16699 5 8 5937 5 2 20611 1 8 8077 10 1 12386 9 4 1663 9 10 3910 1 9 10401 7 10 2383 2 9 13681
output:
nonnondayo
result:
ok single line: 'nonnondayo'
Test #8:
score: 0
Accepted
time: 1ms
memory: 3784kb
input:
10 20 1 10 1 2 18853 2 3 9034 3 4 4069 3 5 7743 3 6 17122 6 7 11715 2 8 14814 1 9 15011 7 10 6248 6 8 19400 7 3 16354 6 8 5249 7 8 20701 5 10 8079 10 5 12570 7 10 1006 8 3 3814 5 10 10753 5 9 2310 8 6 13123
output:
59951
result:
ok single line: '59951'
Test #9:
score: 0
Accepted
time: 1ms
memory: 3636kb
input:
10 11 3 1 1 2 9407 1 3 7005 1 4 5453 1 5 4585 1 6 8278 1 7 6332 1 8 1415 1 9 3809 1 10 10519 2 6 2507 10 6 11580
output:
nonnondayo
result:
ok single line: 'nonnondayo'
Subtask #3:
score: 0
Wrong Answer
Dependency #2:
100%
Accepted
Test #10:
score: 0
Wrong Answer
time: 0ms
memory: 6200kb
input:
1000 3000 100 10 1 2 2270918 1 3 871400 2 4 1242131 3 5 2307909 5 6 1391239 3 7 1431327 7 8 2501929 5 9 2377716 8 10 612146 5 11 991199 11 12 1810465 10 13 1094558 10 14 2605381 8 15 872336 10 16 2092297 5 17 619719 14 18 1161002 5 19 1828768 10 20 837691 2 21 1787203 3 22 396276 21 23 1371664 16 24...
output:
658294011
result:
wrong answer 1st lines differ - expected: '645739778', found: '658294011'
Subtask #4:
score: 0
Wrong Answer
Dependency #1:
100%
Accepted
Test #14:
score: 0
Wrong Answer
time: 34ms
memory: 12676kb
input:
49997 54855 3516 1 3 2 123052288 4 2 96660489 5 4 21916339 6 4 110026562 7 2 37432698 8 4 38560777 9 5 83209343 10 9 80352789 11 2 88956732 12 7 65449905 13 2 38239108 14 5 90154247 15 4 30810782 16 13 96492679 17 14 112886179 18 9 87190321 19 5 91181643 20 3 107304129 21 15 101439791 22 19 12060197...
output:
2710477154627
result:
wrong answer 1st lines differ - expected: '2688197428747', found: '2710477154627'
Subtask #5:
score: 0
Wrong Answer
Test #21:
score: 10
Accepted
time: 44ms
memory: 12436kb
input:
9992 99999 500 1 1 2 96661121 1 3 21915940 1 4 110026320 1 5 37433129 1 6 38560320 1 7 83209024 1 8 80352054 1 9 88957672 1 10 65449874 1 11 38239186 1 12 90153728 1 13 30810974 1 14 96493404 1 15 112886259 1 16 87190053 1 17 91182163 1 18 107303768 1 19 101439823 1 20 120601875 1 21 122197599 1 22 ...
output:
112890891818
result:
ok single line: '112890891818'
Test #22:
score: 0
Accepted
time: 42ms
memory: 11772kb
input:
9992 99999 1 1 1 2 96660674 2 3 21916518 2 4 110026286 2 5 37432719 4 6 38560294 5 7 83209368 7 8 80352797 2 9 88957012 6 10 65449023 8 11 38237968 3 12 90153572 12 13 30810767 12 14 96493398 9 15 112886094 8 16 87190517 2 17 91182246 5 18 107304167 15 19 101440398 16 20 120601474 13 21 122197537 21...
output:
74448057849
result:
ok single line: '74448057849'
Test #23:
score: 0
Accepted
time: 41ms
memory: 12000kb
input:
9996 99999 2000 1 1 2 96660545 1 3 21916931 1 4 110026628 1 5 37432991 1 6 38561067 1 7 83208951 1 8 80351952 1 9 88957054 1 10 65449457 1 11 38238861 1 12 90154656 1 13 30811324 1 14 96493311 1 15 112885579 1 16 87189959 1 17 91182035 1 18 107304613 1 19 101440492 1 20 120602368 1 21 122197999 1 22...
output:
222817867069
result:
ok single line: '222817867069'
Test #24:
score: 0
Accepted
time: 39ms
memory: 11972kb
input:
9998 99999 6000 1 1 2 96661358 1 3 21916728 1 4 110026601 1 5 37432478 1 6 38560240 1 7 83209841 1 8 80352730 1 9 88957089 1 10 65450089 1 11 38238321 1 12 90153969 1 13 30810766 1 14 96493287 1 15 112885621 1 16 87190068 1 17 91181672 1 18 107303705 1 19 101440812 1 20 120601672 1 21 122197495 1 22...
output:
514650883971
result:
ok single line: '514650883971'
Test #25:
score: 0
Accepted
time: 24ms
memory: 11408kb
input:
9995 99999 8000 1 1 2 96661390 1 3 21916323 1 4 110026027 1 5 37433293 1 6 38560397 1 7 83209785 1 8 80352815 1 9 88957405 1 10 65449996 1 11 38238934 1 12 90153822 1 13 30811526 1 14 96493201 1 15 112885855 1 16 87190720 1 17 91181544 1 18 107304307 1 19 101440244 1 20 120601746 1 21 122196886 1 22...
output:
nonnondayo
result:
ok single line: 'nonnondayo'
Test #26:
score: -10
Wrong Answer
time: 38ms
memory: 12036kb
input:
9999 99999 20 20 1 2 338468867 2 3 76745032 1 4 385269279 4 5 131075646 4 6 135023312 1 7 291366571 1 8 281365164 8 9 311495712 1 10 229179809 1 11 133897410 3 12 315685852 8 13 107887724 7 14 337881155 9 15 395284833 13 16 305307019 11 17 319285082 6 18 375738280 12 19 355203621 18 20 422302252 13 ...
output:
264363071138
result:
wrong answer 1st lines differ - expected: '261371897445', found: '264363071138'
Subtask #6:
score: 0
Skipped
Dependency #3:
0%
Subtask #7:
score: 0
Skipped
Dependency #1:
100%
Accepted
Dependency #2:
100%
Accepted
Dependency #3:
0%