QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#360598#4891. 树上的孤独dengtingyu0 1843ms840228kbC++144.8kb2024-03-21 22:22:002024-03-21 22:22:00

Judging History

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

  • [2024-03-21 22:22:00]
  • 评测
  • 测评结果:0
  • 用时:1843ms
  • 内存:840228kb
  • [2024-03-21 22:22:00]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define N 200010
#define Q 1001000
ll n,m,q;
vector<ll>g[N],e[N];
ll d1[N],c1[N],df1[N],s1[N];ll dc1=0;
inline bool pd1(ll x,ll y){return df1[x]<=df1[y]&&df1[y]<=df1[x]+s1[x]-1;}
inline void dfs(ll x,ll fa){
    d1[x]=d1[fa]+1;df1[x]=++dc1;s1[x]=1;
    for(auto o:g[x])if(o!=fa)dfs(o,x),s1[x]+=s1[o];
    return ;
}
ll dep[N],col[N];
ll siz[N],son[N],top[N],fa[N];
ll dfn[N],dfncnt=0;
inline bool pd(ll x,ll y){return dfn[x]<=dfn[y]&dfn[y]<=dfn[x]+siz[x]-1;}
inline void dfs1(ll x,ll faa){
    fa[x]=faa;siz[x]=1;dep[x]=dep[faa]+1;
    for(auto o:e[x]){
        if(o==faa)continue;
        dfs1(o,x);siz[x]+=siz[o];
        if(siz[o]>siz[son[x]])son[x]=o;
    }return ;
}
ll dui[N];
inline void dfs2(ll x,ll tp){
    top[x]=tp;dfn[x]=++dfncnt;dui[dfncnt]=x;
    if(son[x]){
        dfs2(son[x],tp);
    }for(auto o:e[x]){
        if(!dfn[o])dfs2(o,o);
    }return ;
}
inline ll lca(ll x,ll y){
    while(top[x]!=top[y]){
        if(dep[top[x]]<dep[top[y]])swap(x,y);
        x=fa[top[x]];
    }if(dep[x]<dep[y])swap(x,y);
    return y;
}
ll rt[N],lc[N*40],rc[N*40],val[N*40];ll gg=0;
inline void pushup(ll o){val[o]=val[lc[o]]+val[rc[o]];return ;}
inline void update(ll &o,ll l,ll r,ll x,ll y){
    if(!o)o=++gg;if(l==r){val[o]+=y;return ;}
    ll mid=(l+r)>>1;
    if(mid>=x)update(lc[o],l,mid,x,y);
    else update(rc[o],mid+1,r,x,y);
    pushup(o);return ;
}
inline ll merge(ll o,ll p,ll l,ll r){
    if(!o||!p)return o+p;
    if(l==r){val[o]+=val[p];return o;}
    ll mid=(l+r)>>1;
    lc[o]=merge(lc[o],lc[p],l,mid);
    rc[o]=merge(rc[o],rc[p],mid+1,r);
    pushup(o);return o;
}
inline ll ask(ll o,ll l,ll r,ll x,ll y){
    if(!o)return 0;if(x<=l&&r<=y)return val[o];
    ll an=0,mid=(l+r)>>1;
    if(mid>=x)an+=ask(lc[o],l,mid,x,y);
    if(mid<y)an+=ask(rc[o],mid+1,r,x,y);
    return an;
}
ll tem[N];ll cn=0;ll mi[N];
vector<ll>ex[N],wc[N];
inline bool cmp(ll x,ll y){return dfn[x]<dfn[y];}
ll vv[N];
inline void build(){
    sort(tem+1,tem+cn+1,cmp);cn=unique(tem+1,tem+cn+1)-tem-1;for(int i=1;i<=cn;i++)vv[tem[i]]=1;
    ll pre=cn;for(int i=1;i<pre;i++)tem[++cn]=lca(tem[i],tem[i+1]);
    sort(tem+1,tem+cn+1,cmp);cn=unique(tem+1,tem+cn+1)-tem-1;
    for(int i=2;i<=cn;i++)ex[lca(tem[i-1],tem[i])].push_back(tem[i]);
    return ;
}
inline void gt(ll x){
    if(vv[x])mi[x]=dep[x];
    for(auto o:ex[x]){
        gt(o);update(rt[x],1,n,mi[o],-1);
        mi[x]=min(mi[x],mi[o]);
    }update(rt[x],1,n,mi[x],1);
    return ;
}
vector<ll>hs[N],dd[N],ji[N],xw[N];
inline void clear(ll tp){
    // if(tp==3)cout<<tem[1]<<' '<<mi[tem[1]]<<' '<<dd[tem[1]].size()<<'\n';
    for(int i=1;i<=cn;i++)hs[tem[i]].push_back(tp),dd[tem[i]].push_back(mi[tem[i]]),ex[tem[i]].clear(),mi[tem[i]]=n+1;cn=0;
    return ;
}
inline void idfs(ll x,ll fa){
    for(auto o:e[x]){
        if(o==fa)continue;
        idfs(o,x);rt[x]=merge(rt[x],rt[o],1,n);
    }return ;
}
#define V 20001000
ll x[V],y[V],ans[V];ll cnt=0;
ll fir[Q],p1[Q],p2[Q],p3[Q],p4[Q];ll gs=0;
ll vis[N];
int main(){
    //freopen("test1.in","r",stdin);
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cin>>m>>n>>q;for(int i=1,u,v;i<m;i++)cin>>u>>v,g[u].push_back(v),g[v].push_back(u);for(int i=1,u,v;i<n;i++)cin>>u>>v,e[u].push_back(v),e[v].push_back(u);
    for(int i=1;i<=m;i++)cin>>c1[i];for(int i=1;i<=n;i++)cin>>col[i],wc[col[i]].push_back(i);
    dfs(1,0);dfs1(1,0);dfs2(1,1);
    for(int i=1;i<=n;i++)mi[i]=n+1;
    for(int i=1;i<=n;i++){
        for(auto o:wc[i])tem[++cn]=o;if(!cn)continue;
        build();gt(tem[1]);
        clear(i);
    }idfs(1,0);
    for(int i=1;i<=q;i++){
        ll op;cin>>op;if(op==1){
            ++gs;cin>>p1[gs]>>p2[gs]>>p3[gs]>>p4[gs];
            fir[gs]=cnt;for(int i=1;i<=m;i++){
                x[++cnt]=p2[gs];y[cnt]=c1[i];xw[p2[gs]].push_back(cnt);
            }
        }else{
            ll x,y;cin>>x>>y;c1[x]=y;
        }
    }for(int t=1;t<=n;t++){
        ll i=dui[t];for(auto o:xw[i])ji[y[o]].push_back(o);
        ll nw=0;for(auto o:hs[i]){
            ll val=dd[i][nw++];
            for(auto p:ji[o]){
                if(pd(x[p],i))ans[p]=val;
                else ans[p]=n+1;
            }ji[o].clear();
        }
    }for(int i=1;i<=n;i++)for(auto o:ji[i])ans[o]=n+1;
    // cout<<val[rt[1]]<<'\n';
    // cout<<ask(rt[1],1,n,1,3)<<'\n';return 0;
    // cout<<cnt<<'\n';for(int i=1;i<=cnt;i++)cout<<ans[i]<<'\n';
    ll las=0;for(int i=1;i<=gs;i++){
        p3[i]^=las;p4[i]^=las;ll lim=min(dep[p2[i]]+p4[i],n);
        las=ask(rt[p2[i]],1,n,1,lim);
        for(int j=1;j<=m;j++){
            if(!pd1(p1[i],j)||d1[j]>d1[p1[i]]+p3[i]||ans[fir[i]+j]<=lim||vis[y[fir[i]+j]])continue;
            las++;vis[y[fir[i]+j]]=1;
        }for(int j=fir[i]+1;j<=fir[i]+m;j++)vis[y[j]]=0;
        cout<<las<<'\n';
    }return 0;
}

詳細信息

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 7ms
memory: 72504kb

input:

20 2000 2000
8 15
8 13
14 8
14 7
12 14
12 1
9 13
9 4
5 9
5 10
2 5
2 19
6 19
6 16
11 7
11 20
18 2
18 17
3 6
1395 1783
1395 1735
1735 457
457 739
739 438
438 101
101 441
441 1879
1879 1238
1238 501
501 1732
1732 1910
1910 2000
2000 834
834 917
917 111
111 780
780 1966
1966 1604
1604 623
623 1748
1748 ...

output:

105
93
2
44
19
54
198
25
69
21
21
200
94
88
137
33
68
68
54
35
24
8
23
78
59
100
27
200
40
74
97
21
87
36
198
88
28
49
11
20
55
60
24
5
109
158
23
21
15
102
36
108
26
79
190
82
32
147
152
9
136
31
109
142
119
68
34
64
18
40
56
48
54
14
35
184
111
130
144
200
21
80
84
37
73
24
28
37
160
51
62
51
95
2...

result:

wrong answer 7th numbers differ - expected: '192', found: '198'

Subtask #2:

score: 0
Wrong Answer

Test #3:

score: 0
Wrong Answer
time: 1281ms
memory: 613608kb

input:

20 200000 500000
8 18
8 4
2 4
2 14
13 4
13 16
6 4
6 3
1 4
1 17
15 6
15 19
7 17
7 11
5 14
5 10
20 7
12 15
9 8
165302 77239
165302 198189
165302 180850
165302 192738
165302 173589
165302 194087
165302 191990
165302 167370
165302 101092
165302 92553
165302 163654
165302 122381
165302 152105
165302 1919...

output:

2
17595
3898
3423
16
518
5138
11355
21
7340
21
18327
16007
6638
514
1184
6110
1884
6241
662
16738
13230
1597
5446
6074
2387
6265
2
21
282
3511
1806
1236
1038
17804
4657
5536
4633
4547
21
244
2703
2
4610
8571
4037
21
13498
5648
2054
3489
4869
5828
802
2072
1482
13232
2593
938
16874
2
17623
353
5
21
7...

result:

wrong answer 13th numbers differ - expected: '15797', found: '16007'

Subtask #3:

score: 0
Wrong Answer

Test #7:

score: 0
Wrong Answer
time: 296ms
memory: 212508kb

input:

20 100000 100000
16 12
16 20
6 12
6 18
2 16
2 8
5 20
5 13
3 6
3 11
19 11
19 17
9 12
9 15
4 15
4 7
10 5
14 15
14 1
85812 94626
85812 91172
91172 93788
93788 96567
96567 75524
75524 23275
23275 98340
98340 81608
81608 91480
91480 75108
75108 56605
56605 93317
93317 41617
41617 77160
77160 727
727 7559...

output:

2568
612
9230
8985
3561
9182
649
301
2478
7307
2682
1175
1401
1268
8983
4407
109
2696
640
5053
3165
9184
21
9408
2092
9977
9327
2455
21
5038
87
2038
1881
19
1292
2183
336
1101
9386
3477
7723
1958
2741
1256
2331
715
21
545
21
448
699
2332
447
18
38
1424
2321
693
2459
21
2320
714
9999
8
196
1366
8933
...

result:

wrong answer 3rd numbers differ - expected: '8337', found: '9230'

Subtask #4:

score: 0
Wrong Answer

Test #13:

score: 0
Wrong Answer
time: 732ms
memory: 261120kb

input:

1 200000 500000
189127 137023
189127 199761
199761 160701
160701 130639
130639 190908
190908 176819
176819 193363
193363 188021
188021 182446
182446 186028
186028 198828
198828 190792
190792 155378
155378 189428
189428 177276
177276 146159
146159 175923
175923 188073
188073 182206
182206 131072
1310...

output:

3782
1773
771
7328
18160
19791
1952
2
5498
2
2859
3368
7393
5131
5706
2
10560
19991
2
5123
2
12880
1497
4837
7770
16333
18175
5926
17983
19867
3821
17709
17124
4226
3822
576
5637
3660
7061
16945
2
19416
29
5068
16662
2276
16601
4544
598
845
19983
7054
882
164
2744
1683
9558
5091
1632
7251
2931
2778
...

result:

wrong answer 6th numbers differ - expected: '19394', found: '19791'

Subtask #5:

score: 0
Wrong Answer

Test #15:

score: 0
Wrong Answer
time: 1843ms
memory: 840228kb

input:

20 200000 1000000
13 10
13 5
19 5
19 20
15 10
15 6
12 6
12 3
8 10
8 2
1 20
1 11
14 10
14 16
18 3
18 7
4 3
9 10
9 17
194055 154514
194055 148156
148156 115271
115271 198116
198116 179433
179433 171975
171975 196600
196600 167194
167194 185078
185078 191409
191409 163496
163496 178243
178243 154093
15...

output:

459
5817
10120
7654
5844
19788
3577
16856
2835
7538
1131
9925
18655
497
11876
2132
9849
7576
7602
111
1850
7391
3350
13932
19841
17423
6207
1725
5922
5596
3820
1918
718
3319
2715
19890
5606
634
753
1301
15995
2973
1671
14686
5218
5885
118
1896
3266
1936
14767
4577
7219
5902
11027
4392
7461
9754
1964...

result:

wrong answer 5th numbers differ - expected: '4894', found: '5844'