Submission #535413
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
typedef signed long long ll;
#undef _P
#define _P(...) (void)printf(__VA_ARGS__)
#define FOR(x,to) for(x=0;x<to;x++)
#define FORR(x,arr) for(auto& x:arr)
#define ITR(x,c) for(__typeof(c.begin()) x=c.begin();x!=c.end();x++)
#define ALL(a) (a.begin()),(a.end())
#define ZERO(a) memset(a,0,sizeof(a))
#define MINUS(a) memset(a,0xff,sizeof(a))
//-------------------------------------------------------
int N,Q;
int A[101010];
int B[101010];
int C[101010];
int X[101010],V[101010],W[101010],LC[101010];
int OL[101010],OR[101010],eid;
int P[21][100005],D[100005];
vector<int> E[101010];
vector<int> QS[101010],QL[101010],QE[101010];
vector<int> DV[101010];
set<pair<int,int>> S[101010];
int nt[101010],nt2[101010];
set<pair<int,int> > SV;
void dfs(int cur) {
OL[cur]=eid++;
nt[cur]=QE[cur].size();
DV[D[cur]].push_back(cur);
ITR(it,E[cur]) if(*it!=P[0][cur]) D[*it]=D[cur]+1, P[0][*it]=cur, dfs(*it), nt[cur]+=nt[*it];
OR[cur]=eid;
}
int lca(int a,int b) {
int ret=0,i,aa=a,bb=b;
if(D[aa]>D[bb]) swap(aa,bb);
for(i=19;i>=0;i--) if(D[bb]-D[aa]>=1<<i) bb=P[i][bb];
for(i=19;i>=0;i--) if(P[i][aa]!=P[i][bb]) aa=P[i][aa], bb=P[i][bb];
return (aa==bb)?aa:P[0][aa]; // vertex
}
void gomod(int r) {
while(S[r].size()) {
auto it=S[r].end();
int q=(*--it).second;
if(X[q]<A[r]) break;
X[q] %= A[r];
S[r].erase(it);
S[r].insert({X[q],q});
}
}
void solve() {
int i,j,k,l,r,x,y; string s;
cin>>N>>Q;
FOR(i,N) cin>>A[i];
FOR(i,N-1) {
cin>>B[i]>>C[i];
E[B[i]-1].push_back(C[i]-1);
E[C[i]-1].push_back(B[i]-1);
}
dfs(0);
FOR(i,19) FOR(x,N) P[i+1][x]=P[i][P[i][x]];
FOR(i,Q) {
cin>>X[i]>>V[i]>>W[i];
V[i]--,W[i]--;
LC[i]=lca(V[i],W[i]);
QS[V[i]].push_back(i);
QL[LC[i]].push_back(i);
QE[W[i]].push_back(i);
SV.insert({OL[W[i]],i});
}
for(i=N;i>=0;i--) FORR(r,DV[i]) {
int mav=-1, tar=-1;
FORR(e,E[r]) if(D[e]==D[r]+1 && (int)S[e].size()>mav) mav=S[e].size(),tar=e;
if(mav>=0) {
swap(S[r],S[tar]);
FORR(e,E[r]) if(D[e]==D[r]+1 && e!=tar) {
FORR(ss,S[e]) S[r].insert(ss);
S[e].clear();
}
}
FORR(q,QS[r]) S[r].insert({X[q],q});
gomod(r);
FORR(q,QL[r]) S[r].erase({X[q],q});
}
FOR(i,N+1) FORR(r,DV[i]) {
FORR(q,QL[r]) S[r].insert({X[q],q});
gomod(r);
FORR(q,QE[r]) S[r].erase({X[q],q}),SV.erase({OL[W[q]],q});
int mav=-1, tar=-1;
FORR(e,E[r]) if(D[e]==D[r]+1 && nt[e]>mav) mav=nt[e],tar=e;
FORR(e,E[r]) if(D[e]==D[r]+1 && tar!=e) {
for(auto sit=SV.lower_bound({OL[e],0});sit!=SV.end() && sit->first<OR[e];sit++) {
int ss=sit->second;
if(S[r].count({X[ss],ss})) {
S[e].insert({X[ss],ss});
S[r].erase({X[ss],ss});
}
}
}
if(tar!=-1) swap(S[tar],S[r]);
}
FOR(i,Q) _P("%d\n",X[i]);
}
int main(int argc,char** argv){
string s;int i;
if(argc==1) ios::sync_with_stdio(false);
FOR(i,argc-1) s+=argv[i+1],s+='\n';
FOR(i,s.size()) ungetc(s[s.size()-1-i],stdin);
solve(); return 0;
}
Submission Info
Submission Time |
|
Task |
J - MODクエリ |
User |
kmjp |
Language |
C++11 (GCC 4.9.2) |
Score |
400 |
Code Size |
3097 Byte |
Status |
AC |
Exec Time |
1332 ms |
Memory |
50600 KB |
Judge Result
Set Name |
Small |
All |
Score / Max Score |
30 / 30 |
370 / 370 |
Status |
|
|
Set Name |
Test Cases |
Small |
00_sample_path_01.txt, 15_path_00.txt, 15_path_01.txt, 15_path_02.txt, 15_path_03.txt, 15_path_04.txt, 16_path_05.txt, 16_path_06.txt, 16_path_07.txt, 16_path_08.txt, 16_path_09.txt, 17_path_10.txt, 17_path_11.txt, 17_path_12.txt, 17_path_13.txt, 17_path_14.txt |
All |
00_sample_path_01.txt, 15_path_00.txt, 15_path_01.txt, 15_path_02.txt, 15_path_03.txt, 15_path_04.txt, 16_path_05.txt, 16_path_06.txt, 16_path_07.txt, 16_path_08.txt, 16_path_09.txt, 17_path_10.txt, 17_path_11.txt, 17_path_12.txt, 17_path_13.txt, 17_path_14.txt, 20_random_15.txt, 20_random_16.txt, 20_random_17.txt, 21_random_18.txt, 21_random_19.txt, 21_random_20.txt, 30_random_21.txt, 30_random_22.txt, 30_random_23.txt, 40_random_24.txt, 40_random_25.txt, 40_random_26.txt, 49_sample_02.txt, 61_test_27.txt, 61_test_28.txt, 61_test_29.txt, 63_star_30.txt, 63_star_31.txt, 63_star_32.txt, 64_three_33.txt, 64_three_34.txt, 64_three_35.txt |
Case Name |
Status |
Exec Time |
Memory |
00_sample_path_01.txt |
AC |
61 ms |
17444 KB |
15_path_00.txt |
AC |
61 ms |
17440 KB |
15_path_01.txt |
AC |
57 ms |
17444 KB |
15_path_02.txt |
AC |
58 ms |
17444 KB |
15_path_03.txt |
AC |
56 ms |
17448 KB |
15_path_04.txt |
AC |
57 ms |
17448 KB |
16_path_05.txt |
AC |
57 ms |
17444 KB |
16_path_06.txt |
AC |
56 ms |
17440 KB |
16_path_07.txt |
AC |
57 ms |
17440 KB |
16_path_08.txt |
AC |
57 ms |
17448 KB |
16_path_09.txt |
AC |
61 ms |
17444 KB |
17_path_10.txt |
AC |
816 ms |
50460 KB |
17_path_11.txt |
AC |
789 ms |
50460 KB |
17_path_12.txt |
AC |
800 ms |
50464 KB |
17_path_13.txt |
AC |
829 ms |
50600 KB |
17_path_14.txt |
AC |
779 ms |
50520 KB |
20_random_15.txt |
AC |
56 ms |
17440 KB |
20_random_16.txt |
AC |
55 ms |
17432 KB |
20_random_17.txt |
AC |
55 ms |
17448 KB |
21_random_18.txt |
AC |
55 ms |
17432 KB |
21_random_19.txt |
AC |
54 ms |
17444 KB |
21_random_20.txt |
AC |
55 ms |
17436 KB |
30_random_21.txt |
AC |
59 ms |
17444 KB |
30_random_22.txt |
AC |
60 ms |
17440 KB |
30_random_23.txt |
AC |
60 ms |
17436 KB |
40_random_24.txt |
AC |
1305 ms |
46680 KB |
40_random_25.txt |
AC |
1317 ms |
46364 KB |
40_random_26.txt |
AC |
1332 ms |
46748 KB |
49_sample_02.txt |
AC |
56 ms |
17436 KB |
61_test_27.txt |
AC |
984 ms |
45912 KB |
61_test_28.txt |
AC |
962 ms |
45976 KB |
61_test_29.txt |
AC |
1052 ms |
47128 KB |
63_star_30.txt |
AC |
904 ms |
46872 KB |
63_star_31.txt |
AC |
927 ms |
46744 KB |
63_star_32.txt |
AC |
886 ms |
46744 KB |
64_three_33.txt |
AC |
1004 ms |
49068 KB |
64_three_34.txt |
AC |
966 ms |
49692 KB |
64_three_35.txt |
AC |
984 ms |
48408 KB |