QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#183160 | #4898. 基础图论练习题 | hos_lyric# | 30 | 66ms | 19636kb | C++14 | 7.6kb | 2023-09-19 07:59:36 | 2024-07-04 02:03:29 |
Judging History
answer
#include <cassert>
#include <cmath>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <functional>
#include <iostream>
#include <limits>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
using namespace std;
using Int = long long;
template <class T1, class T2> ostream &operator<<(ostream &os, const pair<T1, T2> &a) { return os << "(" << a.first << ", " << a.second << ")"; };
template <class T> ostream &operator<<(ostream &os, const vector<T> &as) { const int sz = as.size(); os << "["; for (int i = 0; i < sz; ++i) { if (i >= 256) { os << ", ..."; break; } if (i > 0) { os << ", "; } os << as[i]; } return os << "]"; }
template <class T> void pv(T a, T b) { for (T i = a; i != b; ++i) cerr << *i << " "; cerr << endl; }
template <class T> bool chmin(T &t, const T &f) { if (t > f) { t = f; return true; } return false; }
template <class T> bool chmax(T &t, const T &f) { if (t < f) { t = f; return true; } return false; }
#define COLOR(s) ("\x1b[" s "m")
////////////////////////////////////////////////////////////////////////////////
template <unsigned M_> struct ModInt {
static constexpr unsigned M = M_;
unsigned x;
constexpr ModInt() : x(0U) {}
constexpr ModInt(unsigned x_) : x(x_ % M) {}
constexpr ModInt(unsigned long long x_) : x(x_ % M) {}
constexpr ModInt(int x_) : x(((x_ %= static_cast<int>(M)) < 0) ? (x_ + static_cast<int>(M)) : x_) {}
constexpr ModInt(long long x_) : x(((x_ %= static_cast<long long>(M)) < 0) ? (x_ + static_cast<long long>(M)) : x_) {}
ModInt &operator+=(const ModInt &a) { x = ((x += a.x) >= M) ? (x - M) : x; return *this; }
ModInt &operator-=(const ModInt &a) { x = ((x -= a.x) >= M) ? (x + M) : x; return *this; }
ModInt &operator*=(const ModInt &a) { x = (static_cast<unsigned long long>(x) * a.x) % M; return *this; }
ModInt &operator/=(const ModInt &a) { return (*this *= a.inv()); }
ModInt pow(long long e) const {
if (e < 0) return inv().pow(-e);
ModInt a = *this, b = 1U; for (; e; e >>= 1) { if (e & 1) b *= a; a *= a; } return b;
}
ModInt inv() const {
unsigned a = M, b = x; int y = 0, z = 1;
for (; b; ) { const unsigned q = a / b; const unsigned c = a - q * b; a = b; b = c; const int w = y - static_cast<int>(q) * z; y = z; z = w; }
assert(a == 1U); return ModInt(y);
}
ModInt operator+() const { return *this; }
ModInt operator-() const { ModInt a; a.x = x ? (M - x) : 0U; return a; }
ModInt operator+(const ModInt &a) const { return (ModInt(*this) += a); }
ModInt operator-(const ModInt &a) const { return (ModInt(*this) -= a); }
ModInt operator*(const ModInt &a) const { return (ModInt(*this) *= a); }
ModInt operator/(const ModInt &a) const { return (ModInt(*this) /= a); }
template <class T> friend ModInt operator+(T a, const ModInt &b) { return (ModInt(a) += b); }
template <class T> friend ModInt operator-(T a, const ModInt &b) { return (ModInt(a) -= b); }
template <class T> friend ModInt operator*(T a, const ModInt &b) { return (ModInt(a) *= b); }
template <class T> friend ModInt operator/(T a, const ModInt &b) { return (ModInt(a) /= b); }
explicit operator bool() const { return x; }
bool operator==(const ModInt &a) const { return (x == a.x); }
bool operator!=(const ModInt &a) const { return (x != a.x); }
friend std::ostream &operator<<(std::ostream &os, const ModInt &a) { return os << a.x; }
};
////////////////////////////////////////////////////////////////////////////////
constexpr unsigned MO = 998244353;
using Mint = ModInt<MO>;
int root(vector<int> &uf, int u) {
return (uf[u] < 0) ? u : (uf[u] = root(uf, uf[u]));
}
bool connect(vector<int> &uf, int u, int v) {
u = root(uf, u);
v = root(uf, v);
if (u == v) return false;
if (uf[u] > uf[v]) swap(u, v);
uf[u] += uf[v];
uf[v] = u;
return true;
}
Int N;
int A, B;
vector<Int> D;
vector<int> X;
vector<Int> U, V;
vector<int> W;
vector<pair<int, int>> es;
namespace brute {
constexpr int F = 19;
vector<int> ufs[F];
// (u, v), (u + 1, v + 1), ..., (u + 2^f-1, v + 2^f-1)
int rec(int f, int u, int v) {
int ret = 0;
if (connect(ufs[f], u, v)) {
if (f) {
ret += rec(f - 1, u, v);
ret += rec(f - 1, u + (1 << (f-1)), v + (1 << (f-1)));
} else {
ret += 1;
}
}
return ret;
}
Mint run() {
for (int f = 0; f < F; ++f) {
ufs[f].assign(N, -1);
}
Mint ans = 0;
for (const auto &e : es) {
int num = 0;
if (e.second < A) {
const int a = e.second;
const int f = 31 - __builtin_clz(N - D[a]);
num += rec(f, 0, D[a]);
num += rec(f, N - D[a] - (1 << f), N - (1 << f));
} else {
const int b = e.second - A;
num += rec(0, U[b], V[b]);
}
// cerr<<e<<": "<<num<<endl;
ans += Mint(e.first) * num;
}
return ans;
}
} // brute
namespace sub3 {
Mint run() {
Int ds[2];
Mint xs[2];
for (int i = 0; i < 2; ++i) {
const int a = es[i].second;
ds[i] = D[a];
xs[i] = X[a];
}
const Int g = __gcd(ds[0], ds[1]);
Mint ans = 0;
if (ds[0] + ds[1] - g <= N) {
const Int tot = N - g;
const Int num0 = N - ds[0];
ans += xs[0] * num0;
ans += xs[1] * (tot - num0);
} else {
ans += xs[0] * (N - ds[0]);
ans += xs[1] * (N - ds[1]);
}
return ans;
}
} // sub3
namespace subA_b0 {
Mint run() {
Int ans = 0;
Int n = N;
Int off = 0;
set<Int> ds(D.begin(), D.end());
for (; ; ) {
if (ds.empty()) {
break;
}
const Int d0 = *ds.begin() + off;
ds.erase(ds.begin());
if (ds.empty()) {
ans += (n - d0);
break;
}
const Int d1 = *ds.begin() + off;
ds.erase(ds.begin());
const Int g = __gcd(d0, d1);
if (d0 + d1 - g <= n) {
ds.insert(g - off);
} else if (2 * d0 > n) {
const Int m = 2 * d0 - n;
n -= m;
ds.insert(d0);
ds.insert(d1);
off -= m;
} else {
const Int q = n / d0;
const Int r = n % d0;
const Int s = d1 / d0;
n -= d0 * s;
ds.insert(d1);
off -= d0 * s;
ds.insert(d0);
ans += d0 * s;
if (q == s) {
ans -= (d0 - r);
}
}
}
return ans;
}
} // subA_b0
int main() {
for (; ~scanf("%lld%d%d", &N, &A, &B); ) {
D.resize(A);
X.resize(A);
for (int a = 0; a < A; ++a) {
scanf("%lld%d", &D[a], &X[a]);
}
U.resize(B);
V.resize(B);
W.resize(B);
for (int b = 0; b < B; ++b) {
scanf("%lld%lld%d", &U[b], &V[b], &W[b]);
}
es.resize(A + B);
for (int a = 0; a < A; ++a) {
es[a] = make_pair(X[a], a);
}
for (int b = 0; b < B; ++b) {
es[A + b] = make_pair(W[b], A + b);
}
sort(es.begin(), es.end());
const bool speA = (X == vector<int>(A, 1) && W == vector<int>(B, 1));
cerr<<"N = "<<N<<", A = "<<A<<", B = "<<B<<", speA = "<<speA<<endl;
Mint ans = 0;
if (A == 2 && B == 0) {
cerr<<"sub3"<<endl;
ans = sub3::run();
} else if (speA && B == 0) {
cerr<<"subA_b0"<<endl;
ans = subA_b0::run();
} else if (N <= 200'000) {
cerr<<"brute"<<endl;
ans = brute::run();
} else {
assert(false);
}
printf("%u\n", ans.x);
#ifdef LOCAL
if(N<=200'000){
const Mint brt=brute::run();
if(brt!=ans)cerr<<"brt = "<<brt<<endl;
assert(brt==ans);
}
#endif
}
return 0;
}
詳細信息
Subtask #1:
score: 4
Accepted
Test #1:
score: 4
Accepted
time: 18ms
memory: 16788kb
input:
161199 9 46510 147335 540442844 159493 801351455 149342 821625305 128476 843250712 95524 275754315 139315 106523502 93575 680460786 155498 328812257 146020 410466645 79992 141967 50596784 152210 68644 268349216 72549 96959 42994091 93869 27394 945120577 2909 81886 270684270 12735 35026 871917997 974...
output:
359714743
result:
ok 1 number(s): "359714743"
Test #2:
score: 0
Accepted
time: 16ms
memory: 17156kb
input:
168549 9 49402 160577 34610415 114623 670751010 74448 676966248 53782 845469137 130729 375561046 31610 261496571 134601 154875802 136129 905308676 166248 499420220 69637 72676 875637640 160442 125460 1269794 146261 61770 714794725 137610 1291 490170432 162092 81850 488118013 106400 48193 276190368 4...
output:
520439176
result:
ok 1 number(s): "520439176"
Test #3:
score: 0
Accepted
time: 21ms
memory: 14060kb
input:
127164 9 45109 56483 490066497 70966 229077054 87305 993081887 72423 442762798 80262 200507011 101712 162752728 67532 590730535 44956 565466274 124237 429166816 13030 8906 742024040 97259 101468 187678659 13401 4301 143856524 125750 80473 258719294 106155 10339 592121345 120034 92354 50915550 112430...
output:
211463174
result:
ok 1 number(s): "211463174"
Test #4:
score: 0
Accepted
time: 17ms
memory: 16424kb
input:
158784 9 48415 138305 177767002 147417 50196642 85527 776201932 144377 990389932 118355 310906417 145220 218744495 145002 132736644 51947 834751363 139733 839880491 158443 157692 159261414 111518 14927 747973081 37498 66196 69874791 11597 115114 22394413 16704 133459 109302190 112143 46551 813021872...
output:
151875883
result:
ok 1 number(s): "151875883"
Test #5:
score: 0
Accepted
time: 11ms
memory: 12944kb
input:
111371 0 45933 13298 59545 852258097 94111 54245 459369673 40744 23311 644404848 37039 92443 220984611 17374 43165 421794343 57652 57965 470479953 62977 14481 563172671 102144 3471 36594913 46628 43278 11508424 55965 80136 777230453 56962 35374 349098036 34825 27995 339605509 43021 17657 780921827 5...
output:
92500087
result:
ok 1 number(s): "92500087"
Subtask #2:
score: 8
Accepted
Dependency #1:
100%
Accepted
Test #6:
score: 8
Accepted
time: 65ms
memory: 19580kb
input:
191116 49595 45279 87483 815631830 153579 433065789 167569 346797140 98560 154881536 170720 13622837 133236 561208103 155537 421316363 140536 514298139 6005 986290017 154400 85233907 166826 351094521 174419 304435906 173900 61174962 112778 693574534 104503 745038995 134920 31228457 117606 662581798 ...
output:
938591083
result:
ok 1 number(s): "938591083"
Test #7:
score: 0
Accepted
time: 54ms
memory: 17364kb
input:
158784 46472 48415 117545 640905746 155053 431989480 155561 63255800 142377 310683680 127120 588058774 150004 169474069 127002 588668628 150906 152304212 108743 687077799 41914 919104130 85429 816335084 132059 559711015 9237 981038801 108448 689051256 152572 446125546 151056 149667391 3602 992249821...
output:
719582900
result:
ok 1 number(s): "719582900"
Test #8:
score: 0
Accepted
time: 57ms
memory: 18244kb
input:
168163 49816 47597 129571 532707978 89007 791596146 120950 589183161 116493 617468410 89768 786647320 94035 758413684 137865 480953267 136999 487494650 134286 503698037 115468 623920627 128035 542927955 91335 776005194 150127 398148336 2766 992431297 143028 109308374 98376 730561618 135270 13761588 ...
output:
934807905
result:
ok 1 number(s): "934807905"
Test #9:
score: 0
Accepted
time: 52ms
memory: 14644kb
input:
121718 46964 48021 43354 819111261 10530 955367869 80777 501381455 69544 639333275 114691 89113603 45387 810937142 31928 865064071 89801 391744587 94263 339137420 119935 23921502 56223 766531932 108313 167240585 106757 185911175 30245 872961430 71691 612640613 102314 242401520 101122 257170039 61627...
output:
135228392
result:
ok 1 number(s): "135228392"
Test #10:
score: 0
Accepted
time: 66ms
memory: 19636kb
input:
188134 49787 48968 187895 50171716 119433 814368117 139552 750931626 132931 458299971 142653 741277533 177407 244563903 130505 469034750 145157 399488414 173707 262070086 168863 158870562 172377 35902964 140369 421860855 29507 967813282 165485 301042299 143784 737822317 162077 173448746 108264 85153...
output:
100771003
result:
ok 1 number(s): "100771003"
Subtask #3:
score: 6
Accepted
Test #11:
score: 6
Accepted
time: 0ms
memory: 3844kb
input:
569435269457904707 2 0 490445920091092693 772271583 144842828305643603 609043885
output:
884694794
result:
ok 1 number(s): "884694794"
Test #12:
score: 0
Accepted
time: 0ms
memory: 3872kb
input:
946929772456816659 2 0 589193907831915013 196301185 485768367910597533 207014034
output:
790540706
result:
ok 1 number(s): "790540706"
Test #13:
score: 0
Accepted
time: 0ms
memory: 3840kb
input:
693038683299151358 2 0 654733556025919068 724998910 450253521190874799 187460097
output:
122292064
result:
ok 1 number(s): "122292064"
Test #14:
score: 0
Accepted
time: 0ms
memory: 3800kb
input:
572269482188906358 2 0 545978502848607475 331750201 488577730099900109 477584735
output:
429885702
result:
ok 1 number(s): "429885702"
Test #15:
score: 0
Accepted
time: 0ms
memory: 3812kb
input:
984888155303961325 2 0 421568681423492040 823358650 324408005979881943 905919848
output:
551223124
result:
ok 1 number(s): "551223124"
Test #16:
score: 0
Accepted
time: 0ms
memory: 4068kb
input:
968068649251960108 2 0 932666179822285222 303897491 422068063538287737 405622211
output:
516717723
result:
ok 1 number(s): "516717723"
Test #17:
score: 0
Accepted
time: 0ms
memory: 3748kb
input:
973235486287221374 2 0 604729607242747292 566399250 440704799734330948 93237801
output:
772791524
result:
ok 1 number(s): "772791524"
Test #18:
score: 0
Accepted
time: 0ms
memory: 3812kb
input:
980842002786834388 2 0 921076927921054095 989436809 917078581302025088 354268450
output:
387335763
result:
ok 1 number(s): "387335763"
Test #19:
score: 0
Accepted
time: 0ms
memory: 3800kb
input:
584600268153835325 2 0 436736455094118542 788823700 379215887395241676 440751386
output:
178749302
result:
ok 1 number(s): "178749302"
Test #20:
score: 0
Accepted
time: 0ms
memory: 4072kb
input:
984888155303961325 2 0 421568681423492040 823358650 324408005979881943 905919848
output:
551223124
result:
ok 1 number(s): "551223124"
Subtask #4:
score: 0
Runtime Error
Dependency #3:
100%
Accepted
Test #21:
score: 0
Runtime Error
input:
569435269457904707 2 48002 490445920091092693 772271583 144842828305643603 609043885 71626464779726163 20936760728342582 933619218 254533877531926689 561120543297327423 444805145 102181371350776436 64807827761321835 63236550 442490347461393187 274703226312639148 379888813 153103619447430279 56932615...
output:
result:
Subtask #5:
score: 12
Accepted
Test #31:
score: 12
Accepted
time: 1ms
memory: 3856kb
input:
755526150476311190 942 0 492334667739348527 1 755523898623296976 1 532486636690994793 1 755526150476030559 1 755526150476249097 1 502164090270592200 1 657422656495814703 1 487200614853438190 1 311037325561173142 1 755526150475651155 1 125287404340238660 1 755524914808674090 1 755526150476177007 1 75...
output:
546044429
result:
ok 1 number(s): "546044429"
Test #32:
score: 0
Accepted
time: 1ms
memory: 3932kb
input:
507397654005748030 973 0 507391491616563534 1 486814015790119176 1 333131389050214032 1 363564475994643564 1 465930313898633808 1 139522156177690314 1 507395579080257474 1 86630001225723132 1 507395634795467574 1 507396923359845774 1 472957579895774142 1 211220548093936200 1 507397483302327114 1 507...
output:
873803086
result:
ok 1 number(s): "873803086"
Test #33:
score: 0
Accepted
time: 1ms
memory: 3864kb
input:
603106685583649335 921 0 550056634223640253 1 603106685583649293 1 603106685583647605 1 603106685583643690 1 603106685583647260 1 603106685583645101 1 603106685583206332 1 603106685583646490 1 579053271797467737 1 603106685567627560 1 392817087439609936 1 603106685583643465 1 603106685583648090 1 60...
output:
249400664
result:
ok 1 number(s): "249400664"
Test #34:
score: 0
Accepted
time: 1ms
memory: 4128kb
input:
548596182165075765 943 0 548596176080168583 1 548596182156180063 1 312480420249896937 1 548596163341594933 1 526283600729694623 1 548596158109050143 1 403131997716059924 1 434962771902913720 1 503166563025971068 1 334309818515550442 1 548596177929282553 1 548596181450546783 1 548596147814225823 1 54...
output:
315888763
result:
ok 1 number(s): "315888763"
Test #35:
score: 0
Accepted
time: 0ms
memory: 3856kb
input:
757339678164545873 914 0 639318686980737134 1 746121423482808728 1 757339678163450618 1 742690258664301578 1 615075436001700347 1 735156649863536078 1 748312116661086428 1 720777012721160772 1 733811525870561678 1 746526366212816378 1 743741354498887825 1 753440640705502328 1 735178291510182878 1 72...
output:
748030011
result:
ok 1 number(s): "748030011"
Test #36:
score: 0
Accepted
time: 1ms
memory: 3892kb
input:
678523609535069397 961 0 678523501457247993 1 678341707003179753 1 678213366219732921 1 596032992350559535 1 595323423910072641 1 178264171486256288 1 678331675351935897 1 353022445409011341 1 653752496830522075 1 662470342111950027 1 587709190707850701 1 678270056924891769 1 677027683908676175 1 67...
output:
562697340
result:
ok 1 number(s): "562697340"
Test #37:
score: 0
Accepted
time: 1ms
memory: 4152kb
input:
657959922343486841 902 0 650132742778059115 1 105135315791795180 1 438709014360864607 1 545602442587344080 1 657551739592023011 1 656791446287459707 1 657959922133303499 1 647469446648658309 1 657959922343384019 1 657959922221719769 1 336017444559583475 1 657959922253125629 1 655097797158940969 1 19...
output:
300994893
result:
ok 1 number(s): "300994893"
Test #38:
score: 0
Accepted
time: 1ms
memory: 3832kb
input:
545476271566415902 948 0 502943849064064720 1 545153141190505744 1 493528954491284005 1 487490221799012640 1 391805643829976272 1 545466964425150144 1 545474613254014704 1 545475659935859328 1 48415031136648176 1 545475230527923072 1 545472466214333424 1 545475176851931040 1 405305381846539616 1 393...
output:
621606394
result:
ok 1 number(s): "621606394"
Test #39:
score: 0
Accepted
time: 1ms
memory: 3856kb
input:
768089367882777564 903 0 768042195730743057 1 624180099065408353 1 677932298998893337 1 761912479820021969 1 373002333986242953 1 681859753068860049 1 768089367882777309 1 580672767835556559 1 768089367882750069 1 51197080622037114 1 737402458661389169 1 768089367882765501 1 707354099585711345 1 768...
output:
319523314
result:
ok 1 number(s): "319523314"
Test #40:
score: 0
Accepted
time: 1ms
memory: 3860kb
input:
803879216581914933 998 0 498552666676978841 1 803189592600095992 1 803577182309491044 1 803875534594601716 1 803827683448699636 1 803767099629307124 1 803775818980883188 1 803799950365214452 1 803816279020876020 1 803806021800931060 1 803585821604611604 1 695090981117645328 1 803690137369875484 1 68...
output:
867132754
result:
ok 1 number(s): "867132754"
Subtask #6:
score: 0
Runtime Error
Dependency #3:
100%
Accepted
Dependency #5:
100%
Accepted
Test #41:
score: 0
Runtime Error
input:
658450692215768892 966 184 215944253331969524 463889684 658450636472429991 583551110 658450692215733673 179443509 658450692215624997 605779678 508574445107762299 859274405 658450681194937638 515630669 63736085272552748 994573345 354907806666837319 932072760 658450692214054043 663256872 6584506911545...
output:
result:
Subtask #7:
score: 0
Runtime Error
Dependency #3:
100%
Accepted
Dependency #5:
100%
Accepted
Test #51:
score: 0
Runtime Error
input:
571630416836886394 47168 0 96863681397862733 975125142 356044822253140262 598706048 515453346882217082 780566337 310612673285348975 628963074 470413750105710996 521531320 485023891192396182 511014543 294586905153825661 925671185 571630416738335094 158726562 185789055211250703 954614799 3548394816997...
output:
result:
Subtask #8:
score: 0
Runtime Error
Dependency #5:
100%
Accepted
Test #61:
score: 0
Runtime Error
input:
716429171502522215 47121 48854 684206275836370608 1 447368400898092275 1 500447584334752997 1 380938825102517800 1 703571667242752149 1 432997187680148804 1 169070786477357537 1 702163195024687605 1 706006848814479885 1 714728181809868081 1 702992487375782988 1 695502249468972696 1 29949334130159091...
output:
result:
Subtask #9:
score: 0
Skipped
Dependency #1:
100%
Accepted
Dependency #2:
100%
Accepted
Dependency #3:
100%
Accepted
Dependency #4:
0%