QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#355816 | #1067. TOLL | parlimoos | 78 | 390ms | 15208kb | C++14 | 4.0kb | 2024-03-17 09:30:06 | 2024-11-07 12:40:53 |
Judging History
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();
}
详细
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%