QOJ.ac
QOJ
The 2nd Universal Cup Finals is coming! Check out our event page, schedule, and competition rules!
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#706606 | #4584. Not One | arnold518# | WA | 56ms | 42304kb | C++17 | 2.3kb | 2024-11-03 12:35:12 | 2024-11-03 12:35:12 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long long lint;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int MAXN = 1e5;
const int MAXM = 1e6+10;
bool prime[MAXM];
int val[MAXM+10];
vector<int> P;
void sieve()
{
fill(prime, prime+MAXM, true);
prime[0]=prime[1]=1;
for(int n=2; n<MAXM; n++)
{
if(prime[n])
{
P.push_back(n);
val[n]=n;
}
for(int pr : P)
{
ll x=(ll)n*pr;
if(x>=MAXM) break;
prime[x]=false;
val[x]=n;
if(n%pr==0) break;
}
}
}
int N, A[MAXN+10];
vector<int> adj[MAXN+10];
int par[MAXN+10], dep[MAXN+10];
void dfs(int now, int bef, int d)
{
par[now]=bef;
dep[now]=d;
for(int nxt : adj[now])
{
if(nxt==bef) continue;
dfs(nxt, now, d+1);
}
}
vector<int> V[MAXM+10];
bool chk[MAXN+10];
int ans=0;
struct UF
{
int par[MAXN+10], sz[MAXN+10];
void init() { for(int i=1; i<=N; i++) par[i]=i, sz[i]=1; }
int Find(int x)
{
if(x==par[x]) return x;
return par[x]=Find(par[x]);
}
void Union(int x, int y)
{
x=Find(x); y=Find(y);
par[x]=y;
sz[y]+=sz[x];
ans=max(ans, sz[y]);
}
void flush(int x) { par[x]=x; sz[x]=1; }
}uf;
int main()
{
ios_base::sync_with_stdio(false); cin.tie(NULL);
sieve();
cin >> N;
for(int i=1; i<=N; i++) cin >> A[i];
for(int i=1; i<N; i++)
{
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
dfs(1, 0, 1);
for(int i=1; i<=N; i++)
{
int x=A[i];
while(x>1)
{
V[val[x]].push_back(i);
x/=val[x];
}
}
uf.init();
for(int i=2; i<MAXM; i++)
{
sort(V[i].begin(), V[i].end());
V[i].erase(unique(V[i].begin(), V[i].end()), V[i].end());
vector<pii> VV;
for(auto it : V[i]) VV.push_back({dep[it], it});
sort(VV.begin(), VV.end());
for(auto [_, it] : VV)
{
ans=max(ans, 1);
chk[it]=true;
if(chk[par[it]]) uf.Union(it, par[it]);
}
for(auto it : V[i]) uf.flush(it), chk[it]=false;
}
cout << ans << '\n';
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 7ms
memory: 35764kb
input:
7 10 5 8 6 10 6 4 1 2 2 3 2 4 4 5 4 6 4 7
output:
4
result:
ok single line: '4'
Test #2:
score: 0
Accepted
time: 7ms
memory: 35640kb
input:
4 1 1 1 1 1 2 2 3 3 4
output:
0
result:
ok single line: '0'
Test #3:
score: 0
Accepted
time: 9ms
memory: 36108kb
input:
5 100 100 100 100 100 3 4 1 2 3 5 2 4
output:
5
result:
ok single line: '5'
Test #4:
score: 0
Accepted
time: 6ms
memory: 36036kb
input:
2 1 1 1 2
output:
0
result:
ok single line: '0'
Test #5:
score: 0
Accepted
time: 56ms
memory: 42304kb
input:
100000 860163 795323 862289 543383 792647 337047 353985 959953 874318 573652 69827 958063 571741 704399 311826 920477 792478 151531 872269 592307 853819 865817 940735 620657 937154 696551 749279 552523 836161 707467 389626 459089 563763 668884 810391 639709 419361 580342 519595 836124 494959 669379 ...
output:
213
result:
ok single line: '213'
Test #6:
score: 0
Accepted
time: 45ms
memory: 40816kb
input:
100000 999983 999983 999961 999961 999979 999979 999979 999961 999983 999961 999979 999961 999961 999983 999961 999983 999983 999979 999961 999979 999983 999979 999983 999961 999979 999961 999979 999979 999961 999979 999983 999979 999961 999961 999961 999961 999961 999983 999979 999983 999979 999961...
output:
70
result:
ok single line: '70'
Test #7:
score: 0
Accepted
time: 54ms
memory: 40536kb
input:
100000 721703 392879 695588 695588 360569 721703 721703 721703 392879 721703 521691 173897 173897 31699 605629 330661 521691 887572 869485 721703 538883 633980 347794 721703 173897 524464 380388 983370 330661 196674 982669 327790 392879 721703 557243 347794 65558 163895 31699 521691 392879 426127 22...
output:
23467
result:
ok single line: '23467'
Test #8:
score: 0
Accepted
time: 42ms
memory: 40684kb
input:
100000 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983 999983...
output:
100000
result:
ok single line: '100000'
Test #9:
score: 0
Accepted
time: 19ms
memory: 37320kb
input:
16666 499521 566687 918452 827210 997739 405921 930466 453499 449367 302663 658220 713125 615536 484783 586258 469620 984395 526320 799319 849099 284114 723734 22671 661826 325985 662335 107207 564634 836931 323058 117954 661326 658962 599495 103335 377185 45338 385027 50770 961843 691799 693591 281...
output:
13
result:
ok single line: '13'
Test #10:
score: 0
Accepted
time: 39ms
memory: 40668kb
input:
66666 10 6 90 60 15 150 90 10 150 12 30 10 12 150 15 50 6 60 60 150 50 50 50 30 10 45 150 6 6 90 50 6 30 12 90 6 60 15 90 45 6 90 45 45 10 60 150 30 30 6 90 12 30 30 6 60 12 45 50 60 45 50 50 50 12 60 10 50 30 150 15 150 90 10 10 12 10 30 6 60 45 6 6 60 12 12 45 12 12 45 12 60 30 30 150 90 6 150 6 6...
output:
46
result:
ok single line: '46'
Test #11:
score: -100
Wrong Answer
time: 28ms
memory: 37684kb
input:
28571 921969 307323 580499 751234 102441 648793 743442 68294 955092 600043 568071 610323 614646 102441 136588 962429 307588 239029 990263 170735 50247 221505 614646 232539 102441 424891 682940 102441 682940 887822 424891 239029 849782 68294 819528 850736 751234 375617 400566 34147 768051 341470 1024...
output:
6472
result:
wrong answer 1st lines differ - expected: '12698', found: '6472'