QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#387767#7871. 命运valeriu#15 44ms12676kbC++204.6kb2024-04-12 19:49:212024-07-04 03:36:16

Judging History

你现在查看的是最新测评结果

  • [2024-07-04 03:36:16]
  • 评测
  • 测评结果:15
  • 用时:44ms
  • 内存:12676kb
  • [2024-04-12 19:49:21]
  • 提交

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%