QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#355816#1067. TOLLparlimoos78 390ms15208kbC++144.0kb2024-03-17 09:30:062024-11-07 12:40:53

Judging History

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

  • [2024-11-07 12:40:53]
  • 管理员手动重测本题所有提交记录
  • 测评结果:78
  • 用时:390ms
  • 内存:15208kb
  • [2024-03-17 09:30:07]
  • 评测
  • 测评结果:400
  • 用时:406ms
  • 内存:13848kb
  • [2024-03-17 09:30:06]
  • 提交

answer

//Be Name KHODA
#pragma GCC optimize("O3")
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef long double ld;
#define pb push_back
#define pp pop_back
#define lb lower_bound
#define ub upper_bound
#define cl clear
#define bg begin
#define arr(x) array<int , x>
#define endl '\n'

int n , m , k;
vector<arr(3)> mst , cnds , uss , uns;
vector<int> a;
vector<arr(2)> adds , g[100000];
ll dsu[100000][2] , mem[100000];
int dsuinx = -1;
vector<array<ll , 3>> bck;

void init(){
    for(int v = 0 ; v < n ; v++) dsu[v][0] = -1 , dsu[v][1] = a[v];
}
void svDsu(int v){
    bck.pb({v , dsu[v][0] , dsu[v][1]});
}
int findDsu(int v){
    if(dsu[v][0] == -1) return v;
    if(dsuinx != -1) svDsu(v);
    return (dsu[v][0] = findDsu(dsu[v][0]));
}
void uDsu(int a , int b){
    a = findDsu(a) , b = findDsu(b);
    if(a == b) return;
    if(dsuinx != -1) svDsu(a) , svDsu(b);
    dsu[a][1] += dsu[b][1] , dsu[b][0] = a;
}
void clDsu(){
    for(int i = (int)bck.size() - 1 ; i >= dsuinx ; i--) dsu[bck[i][0]][0] = bck[i][1] , dsu[bck[i][0]][1] = bck[i][2];
    bck.resize(dsuinx);
}
void getCnds(){
    for(auto e : adds) uDsu(e[0] , e[1]);
    for(auto e : mst){
        if(findDsu(e[1]) == findDsu(e[2])) cnds.pb(e);
        else uDsu(e[1] , e[2]);
    }
    init();
    for(auto e : mst){
        if(!(binary_search(cnds.bg() , cnds.end() , e))) uDsu(e[1] , e[2]);
    }
    dsuinx = 0;
}
bool can(int msk){
    bool res = 1;
    dsuinx = (int)bck.size();
    for(int i = 0 ; i < k ; i++){
        if(!((msk >> i) & 1)) continue;
        if(findDsu(adds[i][0]) == findDsu(adds[i][1])) res = 0;
        uDsu(adds[i][0] , adds[i][1]);
    }
    clDsu() , dsuinx = 0;
    return res;
}
int bs(int e , int msk){
    dsuinx = (int)bck.size();
    for(int i = 0 ; i < k ; i++){
        if(i == e or !((msk >> i) & 1)) continue;
        uDsu(adds[i][0] , adds[i][1]);
    }
    int res = 0;
    for(auto ee : uns){
        if(findDsu(adds[e][0]) == findDsu(adds[e][1])) break;
        res = ee[0] , uDsu(ee[1] , ee[2]);
    }
    clDsu() , dsuinx = 0;
    return res;
}
ll dfs1(int v , int p){
    ll res = 0;
    mem[v] = dsu[v][1];
    for(auto &e : g[v]){
        int u = e[0] - v;
        if(u == p) continue;
        res += dfs1(u , v) , mem[v] += mem[u];
        res += (1ll * e[1]) * mem[u];
    }
    return res;
}
ll getCst(int msk){
    ll res;
    for(int e = 0 ; e < k ; e++){
        if(!((msk >> e) & 1)) continue;
        uDsu(adds[e][0] , adds[e][1]);
    }
    for(auto e : cnds){
        if(findDsu(e[1]) == findDsu(e[2])) uns.pb(e);
        else uDsu(e[1] , e[2]) , uss.pb(e);
    }
    clDsu();
    for(auto e : uss) uDsu(e[1] , e[2]);
    for(int e = 0 ; e < k ; e++){
        if(((msk >> e) & 1)){
            int r1 = findDsu(adds[e][0]) , r2 = findDsu(adds[e][1]) , d = bs(e , msk);
            g[r1].pb({r1 + r2 , d}) , g[r2].pb({r1 + r2 , d});
        }
    }
    res = dfs1(findDsu(0) , -1) , uss.cl() , uns.cl();
    for(int e = 0 ; e < k ; e++) if(((msk >> e) & 1)) g[findDsu(adds[e][0])].pp() , g[findDsu(adds[e][1])].pp();
    dsuinx = 0 , clDsu();
    return res;
}
ll f(){
    ll res = 0;
    for(int msk = 1 ; msk < (1 << k) ; msk++){
        if(can(msk)) res = max(res , getCst(msk));
    }
    return res;
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> m >> k;
    vector<arr(3)> es;
    for(int i = 0 ; i < m ; i++){
        int v , u , c;
        cin >> v >> u >> c;
        v-- , u--;
        es.pb({c , v , u});
    }
    for(int i = 0 ; i < k ; i++){
        int v , u;
        cin >> v >> u;
        adds.pb({v - 1 , u - 1});
    }
    for(int i = 0 ; i < n ; i++){
        int d;
        cin >> d;
        a.pb(d);
    }
    init();
    sort(es.bg() , es.end());
    for(auto e : es){
        if(findDsu(e[1]) == findDsu(e[2])) continue;
        mst.pb(e) , uDsu(e[1] , e[2]);
    }
    init() , getCnds();
    cout << f();
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 16
Accepted

Test #1:

score: 16
Accepted
time: 0ms
memory: 7232kb

input:

10 20 1
9 10 378587
3 10 283693
10 1 276961
8 1 828871
6 3 814717
3 5 701468
4 8 116841
7 5 859891
2 5 973550
9 2 460881
6 5 260184
8 9 895822
3 8 864166
10 4 746770
6 9 818592
7 1 748443
6 2 308698
6 7 170433
6 1 854347
2 10 641070
8 2
739814 240233 280283 628215 946109 596323 536584 590185 294679 ...

output:

909864568000

result:

ok single line: '909864568000'

Test #2:

score: 16
Accepted
time: 1ms
memory: 7992kb

input:

8 20 1
7 2 707898
6 4 739797
6 1 921019
7 3 739954
2 6 26438
5 4 242350
8 5 147225
7 6 53026
2 5 18161
5 1 319852
8 1 928770
6 5 291033
6 8 870601
3 5 596483
4 8 769617
1 4 516480
3 8 960359
2 3 672639
7 8 951165
3 4 911419
7 5
485318 528016 310567 880656 812984 803814 654959 289193

output:

34729855934

result:

ok single line: '34729855934'

Subtask #2:

score: 18
Accepted

Dependency #1:

100%
Accepted

Test #3:

score: 18
Accepted
time: 4ms
memory: 6980kb

input:

26 50 10
10 16 402572
16 17 883196
13 26 698082
5 16 96211
11 16 642512
16 22 44910
5 2 928962
3 24 834337
2 12 56104
18 1 851938
4 14 441768
6 21 793020
25 7 341805
7 22 664203
25 19 671175
8 7 362800
7 6 377915
21 20 975066
8 4 264657
4 26 445906
9 26 821755
18 9 285249
3 17 120207
11 15 816139
23...

output:

26876914464865

result:

ok single line: '26876914464865'

Test #4:

score: 18
Accepted
time: 3ms
memory: 7736kb

input:

30 50 10
24 16 369496
5 2 882195
24 23 579700
24 1 795457
7 10 903779
13 21 98625
27 24 857438
2 26 795121
21 15 117380
10 6 168591
12 2 439190
4 3 631680
18 24 785210
2 16 558732
22 26 215162
4 2 399966
15 2 203973
1 30 206852
12 10 263496
28 29 122008
6 19 593874
1 28 729019
11 14 346091
11 13 859...

output:

9136801138069

result:

ok single line: '9136801138069'

Subtask #3:

score: 22
Accepted

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Test #5:

score: 22
Accepted
time: 6ms
memory: 7476kb

input:

996 4996 10
170 989 243014
721 287 359761
610 423 788736
585 466 513618
554 793 156587
994 825 688447
674 781 762434
508 572 562510
483 869 533334
180 16 760074
128 555 198218
505 477 764496
812 950 933017
956 352 68500
380 453 597965
386 461 73627
912 813 520584
127 912 542464
633 614 869565
466 57...

output:

12830368594279

result:

ok single line: '12830368594279'

Test #6:

score: 22
Accepted
time: 0ms
memory: 6968kb

input:

996 4997 9
88 459 699265
66 726 399273
15 881 921567
780 731 428735
961 840 375485
136 307 332102
667 455 536024
212 370 303328
825 923 766355
244 633 628367
511 971 847795
158 670 931260
863 820 696866
387 414 457843
600 397 514798
983 588 127138
667 177 450185
805 542 524896
142 842 173512
590 989...

output:

131916901593944

result:

ok single line: '131916901593944'

Subtask #4:

score: 22
Accepted

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Dependency #3:

100%
Accepted

Test #7:

score: 22
Accepted
time: 390ms
memory: 14600kb

input:

99999 300000 15
8263 74744 351158
99994 1858 959312
51293 12648 410986
50988 66305 124816
78339 46383 472656
23067 36177 124594
25316 11071 650426
20116 66491 337820
56050 92136 776255
63863 4856 145398
56147 58709 59835
92779 46842 597998
67356 4992 976781
18754 15659 747827
50592 32564 974934
4057...

output:

674157150571257

result:

ok single line: '674157150571257'

Test #8:

score: 22
Accepted
time: 342ms
memory: 14736kb

input:

99997 299997 15
15086 8272 317654
51688 54086 925693
79393 44246 733165
5121 99554 940009
73819 74687 300136
28135 99512 729766
17724 3230 16816
7175 67002 133099
79164 63244 281638
80811 53391 247073
36469 8629 26781
34858 87099 405285
28026 30409 138012
2033 37209 102857
47202 87346 152415
50932 6...

output:

24969716835311373

result:

ok single line: '24969716835311373'

Test #9:

score: 22
Accepted
time: 318ms
memory: 15208kb

input:

99998 299996 15
92044 25170 648129
80059 96640 888347
74422 53399 735265
74474 30014 659633
60006 71490 105530
33305 67230 854383
28825 77262 619529
59991 31479 93123
95700 55692 702097
51099 19406 98145
58858 15465 352917
91120 22132 120191
93857 28179 57758
5140 96513 70872
8385 10647 94137
39516 ...

output:

27631318393017517

result:

ok single line: '27631318393017517'

Subtask #5:

score: 0
Time Limit Exceeded

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Dependency #3:

100%
Accepted

Dependency #4:

100%
Accepted

Test #10:

score: 0
Time Limit Exceeded

input:

100000 299998 20
96038 13455 411806
34273 46237 121800
37816 45499 152136
66614 97068 632185
33093 37063 341112
18567 90031 42759
13592 33972 544036
19075 28170 803755
75682 59080 805802
96474 30020 576324
39190 81518 900617
28771 52586 649619
29548 19634 824228
24855 59532 9471
14656 39015 178564
2...

output:


result:


Subtask #6:

score: 0
Skipped

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Dependency #3:

100%
Accepted

Dependency #4:

100%
Accepted

Dependency #5:

0%