QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#353905#8133. When Anton Saw This Task He Reacted With 😩SolitaryDream#AC ✓1011ms110128kbC++173.3kb2024-03-14 18:51:102024-03-14 18:51:10

Judging History

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

  • [2024-03-14 18:51:10]
  • 评测
  • 测评结果:AC
  • 用时:1011ms
  • 内存:110128kb
  • [2024-03-14 18:51:10]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
#define FOR(i,s,t) for(int i=(s),_t=(t); i<=_t; ++i)
typedef long long ll;
const int N=2e5+50;
const int Mod=998244353;
vector<int> E[N];
int sz[N],dep[N],top[N],Fa[N],son[N],End[N];
int dfn[N],pos[N],cnt;
struct mat {
    ll a[3][3];
    mat() {memset(a,0,sizeof(a));}
    mat operator *(const mat &s) const {
        mat t;
        FOR(i,0,2) FOR(j,0,2) FOR(k,0,2) {
            t.a[i][k]=(t.a[i][k]+a[i][j]*s.a[j][k])%Mod;
        }
        return t;
    }
    void pt() const {
        FOR(i,0,2) FOR(j,0,2) cout << a[i][j] << " \n"[j==2];
    }
};
mat trans(mat s,int p) {
    ll x=s.a[0][0],y=s.a[1][0],z=s.a[2][0];
    mat t;
    if(p==0) {
        t.a[0][2]=y;
        t.a[0][1]=-z;
        t.a[1][0]=z;
        t.a[1][2]=-x;
        t.a[2][1]=x;
        t.a[2][0]=-y;
    } else {
        t.a[0][2]=-y;
        t.a[0][1]=z;
        t.a[1][0]=-z;
        t.a[1][2]=x;
        t.a[2][1]=-x;
        t.a[2][0]=y;
    }
    return t;
}
void dfs(int x) {
    sz[x]=1;
    for(auto y: E[x]) {
        dep[y]=dep[x]+1;
        Fa[y]=x;
        dfs(y);
        sz[x]+=sz[y];
        if(sz[y]>sz[son[x]]) son[x]=y;
    }
}
mat val[N];
mat rdfs(int x,int tp) {
    dfn[x]=++cnt;
    pos[cnt]=x;
    top[x]=tp;
    if(!son[x]) {
        End[x]=x;
        return val[x];
    }
    mat t=rdfs(son[x],tp);
    End[x]=End[son[x]];
    for(auto y: E[x]) {
        if(y!=son[x]) {
            val[x]=trans(rdfs(y,y),y==E[x][1]);
        }
    }
    return val[x]*t;
}
#define ls p<<1
#define rs p<<1|1
#define lson L,mid,ls
#define rson mid+1,R,rs
mat f[N<<2];
void build(int L,int R,int p) {
    if(L==R) {
        f[p]=val[pos[L]];
        return ;
    }
    int mid=L+R>>1;
    build(lson);
    build(rson);
    f[p]=f[ls]*f[rs];
}
mat qry(int L,int R,int p,int l,int r) {
    if(L==l && R==r) return f[p];
    int mid=L+R>>1;
    if(r<=mid) return qry(lson,l,r);
    else if(l>mid) return qry(rson,l,r);
    else return qry(lson,l,mid)*qry(rson,mid+1,r);
}
void upd(int L,int R,int p,int x) {
    if(L==R) {
        f[p]=val[pos[L]];
        return ;
    }
    int mid=L+R>>1;
    if(x<=mid) upd(lson,x);
    else upd(rson,x);
    f[p]=f[ls]*f[rs];
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n,q;
    cin >> n >> q;
    FOR(i,1,n) {
        string op;
        cin >> op;
        if(op[0]=='x') {
            int l,r;
            cin >> l >> r;
            E[i]={l,r};
        } else {
            FOR(j,0,2) {
                cin >> val[i].a[j][0];
            }
        }
    }
    dfs(1);
    auto ans=rdfs(1,1);
    // ans.pt();
    build(1,n,1);
    while(q--) {
        int x;
        cin >> x;
        FOR(i,0,2) cin >> val[x].a[i][0];
        upd(1,n,1,dfn[x]);
        while(top[x]!=1) {
            x=top[x];
            
            // val[Fa[x]].pt();
            val[Fa[x]]=trans(qry(1,n,1,dfn[x],dfn[End[x]]),x==E[Fa[x]][1]);
            // val[Fa[x]].pt();

            x=Fa[x];
            upd(1,n,1,dfn[x]);
        }
        // (val[1]*val[3]*val[4]).pt();
        // cerr << dfn[End[1]] << endl;
        ans=qry(1,n,1,dfn[1],dfn[End[1]]);
        FOR(i,0,2) cout << ans.a[i][0] << ' ';
        cout << '\n';
    }
    // (val[1]*val[2]*val[3]).pt();
    return 0;
}

这程序好像有点Bug,我给组数据试试?

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 4ms
memory: 78668kb

input:

5 3
x 2 3
v 1 0 1
x 4 5
v 0 2 1
v 1 1 1
4 1 2 3
5 0 1 1
4 0 2 2

output:

-2 0 2 
1 -2 -1 
0 0 0 

result:

ok 9 numbers

Test #2:

score: 0
Accepted
time: 1011ms
memory: 87916kb

input:

199999 100000
x 137025 65661
v 572518668 158967010 74946561
x 129836 192657
x 141948 187810
v 574918069 328924434 141474729
x 143312 111002
x 52772 148497
v 922857701 690080961 651915759
v 656198340 28002884 129579416
v 639893144 265359784 646791226
v 796871409 411409966 598676495
v 882562617 224394...

output:

393120558 773766615 -610947005 
759959566 981774500 -870231856 
294611811 980011608 -464602324 
404379574 745296852 -944750793 
404565501 828869760 78021156 
592494858 647751304 881427733 
190018467 515243135 518180555 
628180500 509984554 257430135 
13737245 352087791 917410487 
-66193044 -63165312...

result:

ok 300000 numbers

Test #3:

score: 0
Accepted
time: 899ms
memory: 87924kb

input:

199999 100000
x 154525 80092
v 450407262 725458410 590777520
x 24720 135901
v 719242117 114943104 186796011
v 382530926 89156744 943939337
x 183376 26042
x 109984 157873
x 151637 150600
x 4115 27454
x 163135 92648
x 16764 33212
v 849210403 945083972 689295397
v 471196117 68587428 225597765
x 24643 5...

output:

677067461 996514296 -549077502 
810403092 258196842 -144784620 
410756156 253348518 -85579882 
327134890 519245783 -75715594 
-680876795 -461355816 506214109 
484753530 879045782 -225839405 
422920052 152084658 -480903896 
1207902 348787162 -677423276 
776293878 699474926 -287129823 
871858473 46849...

result:

ok 300000 numbers

Test #4:

score: 0
Accepted
time: 724ms
memory: 88032kb

input:

199999 100000
x 72889 193806
x 35339 33069
v 314802407 406980523 492377265
x 108307 60027
x 144922 140917
v 328481079 117663280 644171354
v 482028404 951751561 166221217
v 936461869 436114879 421819757
x 152919 99965
x 61168 150607
v 56403640 743462679 134896557
v 24809217 462947115 966139991
v 7828...

output:

-974534477 -617795986 -369084686 
760678420 539369190 611778104 
114926687 653692915 939877414 
-324044883 -693498618 -454120550 
953800112 186017361 49200537 
-670961571 -127242676 -704263640 
588783157 502130649 190564297 
-895563447 -4355337 -34765598 
-488231872 -892827456 -716473378 
-187161547...

result:

ok 300000 numbers

Test #5:

score: 0
Accepted
time: 697ms
memory: 88244kb

input:

199999 100000
x 134204 79203
v 152855933 152545887 271660214
v 393332175 182708769 115884220
v 731792305 965028257 676889584
x 89631 14495
x 142016 85686
v 600051847 172947969 906920949
v 846126215 214556203 657929902
x 125721 133526
x 93179 35713
v 330716449 450417250 611411649
v 114397688 58644961...

output:

139597616 375474977 14619793 
889328460 79727434 363703631 
397351102 877961602 429046190 
588368345 819425899 502148739 
-477665442 -811836281 -513870808 
-355756 -181710037 -659833074 
334166269 288211584 608252640 
-488963508 -635271961 -711828658 
363396960 878881251 3658455 
711270872 94816531 ...

result:

ok 300000 numbers

Test #6:

score: 0
Accepted
time: 611ms
memory: 88840kb

input:

199999 100000
x 29842 60343
x 22382 27649
v 148997533 411153785 529195552
v 831453378 856711025 439562917
x 183061 152107
v 208562249 845550020 248974502
x 8708 152913
v 901332053 480035531 424365358
v 120556946 620074725 884675784
v 493886564 455460926 851190410
x 63346 64739
x 35246 36255
v 762936...

output:

236797322 -808025939 -927685092 
-336478455 266356472 481630021 
410967670 -384515050 -194236197 
92638320 -960317575 -915320148 
357869883 -765477642 -418635821 
691702082 -873375751 -810877141 
-760633664 608489848 581104410 
848616732 -90371214 -138436462 
-383619738 454674844 673629667 
48578473...

result:

ok 300000 numbers

Test #7:

score: 0
Accepted
time: 626ms
memory: 89640kb

input:

199999 100000
x 179471 175117
x 189060 178495
x 20142 58065
x 22916 150184
v 704047412 186112247 660817663
v 761554808 199099716 794321264
v 362925435 508140595 251556541
v 65674025 717152823 157775106
v 325965317 977108704 50644678
v 566946741 833186394 771714200
v 996708965 76780827 625429369
v 85...

output:

365258325 -892414579 612397830 
731509055 -421343908 663777200 
553518677 -582790078 7683807 
-530113104 577225931 -484650068 
215590236 -137098079 812820392 
-328258557 229486834 -433552590 
929231866 -478016304 774609748 
-968294064 569366391 -277172238 
644573107 -484529715 554458153 
728007201 -...

result:

ok 300000 numbers

Test #8:

score: 0
Accepted
time: 607ms
memory: 91908kb

input:

199999 100000
x 73506 171332
x 135330 187765
v 308206068 679940956 278078069
v 442448744 196158033 738117032
x 194709 115786
v 208526122 936976225 340056181
x 42663 43401
x 55484 199464
v 865443128 131903961 74265613
x 44659 44773
x 32199 18455
v 986118756 284329619 244212114
v 793747964 649179736 4...

output:

429717039 -129935757 175018519 
-31998235 532451840 -225112347 
-541158255 631788280 -8555110 
550574851 -991537585 416615899 
285141084 -492917864 916518702 
457465389 -344714109 951605771 
-384032521 767828057 -953970559 
698196640 -503306580 99337798 
-279741119 422078037 -846865302 
-977724006 7...

result:

ok 300000 numbers

Test #9:

score: 0
Accepted
time: 599ms
memory: 93620kb

input:

199999 100000
x 109220 170287
v 563361501 367416904 98790213
x 31431 96958
x 99594 159052
x 95382 129615
v 61965807 547448247 405891792
v 443530416 578856323 588763197
v 761021716 795533831 212530056
v 370964907 391812631 255457982
x 49713 153066
x 141543 111694
v 144135957 614962153 284136518
x 416...

output:

-564950391 336914247 -250875550 
-6126833 9180464 -838628109 
483825959 -501508520 964507719 
912495370 -260958569 595438897 
467123496 -953937930 562070292 
-94756115 42971643 -936828694 
-728391208 336741491 -433105475 
-71245255 134871683 -720629537 
-353517322 476324825 -928623072 
984868613 -88...

result:

ok 300000 numbers

Test #10:

score: 0
Accepted
time: 0ms
memory: 78884kb

input:

3 1
x 2 3
v 998244352 998244352 998244352
v 0 0 0
3 1 2 0

output:

-998244351 998244352 -1 

result:

ok 3 number(s): "2 998244352 998244352"

Test #11:

score: 0
Accepted
time: 589ms
memory: 96968kb

input:

199999 100000
x 199465 1690
x 70268 106693
v 194793703 729830314 457557419
x 64673 6910
v 755452906 141328541 558160677
v 725017524 158685295 201414156
x 161801 27226
x 181414 47025
v 387724146 819109666 514628998
v 252532326 97757436 828777580
v 200868967 692540096 706977766
v 300419109 2053530 824...

output:

627210517 -357298462 -597759713 
305641486 -105185528 -898351186 
735729088 -192648820 -715206562 
377070714 -640281451 -661458804 
835938680 -363549622 -975855419 
493696932 -385691560 -481299119 
-34353998 517530875 48223226 
-782926273 742583745 379791022 
-863169608 970450812 921824280 
86572382...

result:

ok 300000 numbers

Test #12:

score: 0
Accepted
time: 550ms
memory: 110128kb

input:

199999 100000
x 37758 141919
v 148792593 369372129 595139892
x 59335 149367
v 452667329 904801829 628919068
v 160106559 532238331 179544300
v 850489754 705167899 265598880
x 120963 167491
x 92157 46815
v 444945978 987276260 843838004
x 189040 28027
v 889755401 760730228 3237333
x 168907 82672
v 2329...

output:

-101058855 177437016 653646802 
-949384144 883514812 764698776 
-493156041 585962448 546090395 
-83998326 540944167 682989725 
-32409202 803706423 302298107 
-545247818 714783487 961852197 
-115526544 425959754 886391042 
-794577049 454663502 78105722 
-486048218 727218227 418204527 
-723309552 2709...

result:

ok 300000 numbers

Extra Test:

score: 0
Extra Test Passed