QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#360597 | #4891. 树上的孤独 | dengtingyu | 0 | 1439ms | 597672kb | C++14 | 4.8kb | 2024-03-21 22:20:58 | 2024-03-21 22:21:00 |
Judging History
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(!pd(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: 11ms
memory: 74388kb
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:
104 91 6 53 2 40 194 25 69 4 12 200 86 88 136 16 68 68 54 35 12 9 10 70 55 100 28 200 24 118 95 24 75 36 198 88 16 48 13 21 57 60 26 7 109 158 23 21 17 102 36 108 26 79 190 82 25 142 182 9 136 31 98 142 119 68 23 64 5 26 56 48 54 14 34 184 102 128 144 200 10 80 84 37 73 10 27 37 160 51 62 47 109 22 ...
result:
wrong answer 1st numbers differ - expected: '105', found: '104'
Subtask #2:
score: 0
Wrong Answer
Test #3:
score: 0
Wrong Answer
time: 1439ms
memory: 597672kb
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:
3 17595 3901 3422 2 518 5138 11355 21 7344 21 18327 16007 6628 515 1182 6110 1884 6241 663 16737 13230 1597 5450 6074 2389 6265 2 21 280 3511 1807 1236 1038 17804 4657 5536 4633 4546 21 245 2703 3 4613 8569 4037 21 13498 5637 2054 3487 4880 5829 802 2072 1480 13232 2593 938 16876 12 17623 353 3 2 71...
result:
wrong answer 1st numbers differ - expected: '2', found: '3'
Subtask #3:
score: 0
Wrong Answer
Test #7:
score: 0
Wrong Answer
time: 293ms
memory: 211192kb
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 606 9210 8985 3561 9182 649 301 2465 7309 2682 1175 1401 1253 8992 4407 109 2696 640 5046 3165 9184 21 9408 2092 9977 9327 2455 21 5037 87 2038 1881 2 1280 2180 346 1106 9386 3477 7723 1958 2741 1256 2331 715 21 553 21 448 707 2332 446 4 2 1425 2321 693 2459 21 2320 714 9999 2 178 1375 8933 826...
result:
wrong answer 2nd numbers differ - expected: '612', found: '606'
Subtask #4:
score: 0
Wrong Answer
Test #13:
score: 0
Wrong Answer
time: 761ms
memory: 255720kb
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
Time Limit Exceeded
Test #15:
score: 0
Time Limit Exceeded
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:
455 5817 10120 7660 5838 19790 3563 16845 2841 7541 1131 9925 18655 497 11876 2132 9842 7574 7602 111 1850 7382 3346 13928 19841 17423 6206 1732 5912 5592 3820 1915 718 3319 2715 19890 5611 611 757 1301 15995 2970 1671 14687 5218 5886 118 1896 3266 1936 14768 4588 7222 5902 11027 4392 7468 9746 1964...