답안 #919352

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
919352 2024-01-31T16:01:26 Z imarn Mergers (JOI19_mergers) C++14
24 / 100
432 ms 90816 KB
#include<bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
#define pll pair<ll,ll>
#define f first
#define s second
#define pb push_back
#define all(x) x.begin(),x.end()
#define vi vector<int>
#define vvi vector<vi>
#define vp vector<pii>
using namespace std;
const int N=5e5+5;
vector<int>g[N];
set<int>gg[N];
int sz[N],id[N],pr[N],head[N],dep[N],cur=0,t[4*N],lz[4*N],pos[N],cp=1,n;
void push(int i,int l,int r){
    if(lz[i]==1e9)return;
    t[i]=min(t[i],lz[i]);
    if(l<r){
        lz[2*i]=min(lz[2*i],lz[i]);
        lz[2*i+1]=min(lz[2*i+1],lz[i]);
    }lz[i]=1e9;
}
void upd(int i,int l,int r,int tl,int tr,int id){
    push(i,l,r);
    if(r<tl||l>tr)return;
    if(r<=tr&&l>=tl){
        lz[i]=min(lz[i],id);push(i,l,r);
        return;
    }int m=(l+r)>>1;
    upd(2*i,l,m,tl,tr,id);upd(2*i+1,m+1,r,tl,tr,id);
    t[i]=min(t[2*i],t[2*i+1]);
}
int qr(int i,int l,int r,int tl,int tr){
    push(i,l,r);
    if(r<tl||l>tr)return 1e9;
    if(r<=tr&&l>=tl)return t[i];
    int m=(l+r)>>1;
    return min(qr(2*i,l,m,tl,tr),qr(2*i+1,m+1,r,tl,tr));
}
void update(int x,int y,int z){
    while(head[x]!=head[y]){
        if(dep[head[x]]<dep[head[y]])swap(x,y);
        upd(1,1,n,id[head[x]],id[x],z);
        x=pr[head[x]];
    }if(dep[x]>dep[y])swap(x,y);
    upd(1,1,n,id[x],id[y],z);
}
int query(int x,int y,int res=1e9){
    while(head[x]!=head[y]){
        if(dep[head[x]]<dep[head[y]])swap(x,y);
        res=min(qr(1,1,n,id[head[x]],id[x]),res);
        x=pr[head[x]];
    }if(dep[x]>dep[y])swap(x,y);
    res=min(res,qr(1,1,n,id[x],id[y]));return res;
}
void dfssz(int u,int p,int l){
    sz[u]=1;dep[u]=l;pr[u]=p;
    for(auto v:g[u]){
        if(v==p)continue;dfssz(v,u,l+1);
        sz[u]+=sz[v];
    }
}
void hld(int u,int p,int tp){
    head[u]=tp;id[u]=++cur;
    int hc=-1,hv=-1;
    for(auto v:g[u]){
        if(v==p)continue;
        if(sz[v]>hc)hv=v,hc=sz[v];
    }if(hv==-1)return;
    hld(hv,u,tp);
    for(auto v:g[u]){
        if(v==p||v==hv)continue;
        hld(v,u,v);
    }
}vector<int>gr[N];
int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);
    int k;cin>>n>>k;
    for(int i=0;i<4*N;i++)t[i]=lz[i]=1e9;
    for(int i=1;i<=n-1;i++){
        int u,v;cin>>u>>v;g[u].pb(v);g[v].pb(u);
    }dfssz(1,1,0);hld(1,1,1);bool ok=1;
    for(int i=1,x;i<=n;i++)cin>>x,gr[x].pb(i);
    for(int i=1;i<=k;i++){
        if(gr[i].empty())continue;
        int top=gr[i][0];int res=cp;
        for(int j=0;j<gr[i].size();j++)res=min(res,query(top,gr[i][j]));
        for(int j=0;j<gr[i].size();j++)update(top,gr[i][j],res);
        if(res!=1)ok=0;
        cp++;
    }if(ok){cout<<0;return 0;}
    for(int i=1;i<=n;i++)pos[i]=qr(1,1,n,id[i],id[i]);
    for(int i=1;i<=n;i++){
        for(auto v:g[i]){
            if(pos[v]==pos[i])continue;
            gg[pos[v]].insert(pos[i]);
            gg[pos[i]].insert(pos[v]);
        }
    }int ct=0;
    for(int i=1;i<=n;i++){
        if(gg[i].empty())continue;
        if(gg[i].size()==1)ct++;
    }cout<<(ct+1)/2;
}

Compilation message

mergers.cpp: In function 'void dfssz(int, int, int)':
mergers.cpp:61:9: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   61 |         if(v==p)continue;dfssz(v,u,l+1);
      |         ^~
mergers.cpp:61:26: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
   61 |         if(v==p)continue;dfssz(v,u,l+1);
      |                          ^~~~~
mergers.cpp: In function 'int main()':
mergers.cpp:89:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   89 |         for(int j=0;j<gr[i].size();j++)res=min(res,query(top,gr[i][j]));
      |                     ~^~~~~~~~~~~~~
mergers.cpp:90:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   90 |         for(int j=0;j<gr[i].size();j++)update(top,gr[i][j],res);
      |                     ~^~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 74584 KB Output is correct
2 Correct 22 ms 75032 KB Output is correct
3 Correct 18 ms 74584 KB Output is correct
4 Correct 22 ms 74588 KB Output is correct
5 Correct 19 ms 74584 KB Output is correct
6 Correct 19 ms 74584 KB Output is correct
7 Correct 20 ms 74588 KB Output is correct
8 Correct 18 ms 74776 KB Output is correct
9 Correct 20 ms 74584 KB Output is correct
10 Correct 19 ms 74776 KB Output is correct
11 Correct 19 ms 74584 KB Output is correct
12 Correct 19 ms 74788 KB Output is correct
13 Correct 20 ms 74588 KB Output is correct
14 Correct 20 ms 74588 KB Output is correct
15 Correct 20 ms 74588 KB Output is correct
16 Correct 20 ms 74584 KB Output is correct
17 Correct 21 ms 74808 KB Output is correct
18 Correct 25 ms 74588 KB Output is correct
19 Correct 19 ms 74588 KB Output is correct
20 Correct 19 ms 74588 KB Output is correct
21 Correct 20 ms 74816 KB Output is correct
22 Correct 19 ms 74584 KB Output is correct
23 Correct 19 ms 74796 KB Output is correct
24 Correct 19 ms 74584 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 74584 KB Output is correct
2 Correct 22 ms 75032 KB Output is correct
3 Correct 18 ms 74584 KB Output is correct
4 Correct 22 ms 74588 KB Output is correct
5 Correct 19 ms 74584 KB Output is correct
6 Correct 19 ms 74584 KB Output is correct
7 Correct 20 ms 74588 KB Output is correct
8 Correct 18 ms 74776 KB Output is correct
9 Correct 20 ms 74584 KB Output is correct
10 Correct 19 ms 74776 KB Output is correct
11 Correct 19 ms 74584 KB Output is correct
12 Correct 19 ms 74788 KB Output is correct
13 Correct 20 ms 74588 KB Output is correct
14 Correct 20 ms 74588 KB Output is correct
15 Correct 20 ms 74588 KB Output is correct
16 Correct 20 ms 74584 KB Output is correct
17 Correct 21 ms 74808 KB Output is correct
18 Correct 25 ms 74588 KB Output is correct
19 Correct 19 ms 74588 KB Output is correct
20 Correct 19 ms 74588 KB Output is correct
21 Correct 20 ms 74816 KB Output is correct
22 Correct 19 ms 74584 KB Output is correct
23 Correct 19 ms 74796 KB Output is correct
24 Correct 19 ms 74584 KB Output is correct
25 Correct 19 ms 74584 KB Output is correct
26 Correct 22 ms 75096 KB Output is correct
27 Correct 22 ms 74952 KB Output is correct
28 Correct 23 ms 75096 KB Output is correct
29 Correct 24 ms 75172 KB Output is correct
30 Correct 24 ms 74944 KB Output is correct
31 Correct 20 ms 74776 KB Output is correct
32 Correct 22 ms 75352 KB Output is correct
33 Correct 20 ms 74584 KB Output is correct
34 Correct 22 ms 74840 KB Output is correct
35 Correct 22 ms 75292 KB Output is correct
36 Correct 24 ms 74844 KB Output is correct
37 Incorrect 23 ms 74840 KB Output isn't correct
38 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 74584 KB Output is correct
2 Correct 22 ms 75032 KB Output is correct
3 Correct 18 ms 74584 KB Output is correct
4 Correct 22 ms 74588 KB Output is correct
5 Correct 19 ms 74584 KB Output is correct
6 Correct 19 ms 74584 KB Output is correct
7 Correct 20 ms 74588 KB Output is correct
8 Correct 18 ms 74776 KB Output is correct
9 Correct 20 ms 74584 KB Output is correct
10 Correct 19 ms 74776 KB Output is correct
11 Correct 19 ms 74584 KB Output is correct
12 Correct 19 ms 74788 KB Output is correct
13 Correct 20 ms 74588 KB Output is correct
14 Correct 20 ms 74588 KB Output is correct
15 Correct 20 ms 74588 KB Output is correct
16 Correct 20 ms 74584 KB Output is correct
17 Correct 21 ms 74808 KB Output is correct
18 Correct 25 ms 74588 KB Output is correct
19 Correct 19 ms 74588 KB Output is correct
20 Correct 19 ms 74588 KB Output is correct
21 Correct 20 ms 74816 KB Output is correct
22 Correct 19 ms 74584 KB Output is correct
23 Correct 19 ms 74796 KB Output is correct
24 Correct 19 ms 74584 KB Output is correct
25 Correct 22 ms 74584 KB Output is correct
26 Correct 169 ms 78956 KB Output is correct
27 Correct 432 ms 78568 KB Output is correct
28 Correct 22 ms 74840 KB Output is correct
29 Correct 18 ms 74584 KB Output is correct
30 Correct 20 ms 74804 KB Output is correct
31 Correct 306 ms 78540 KB Output is correct
32 Correct 22 ms 74780 KB Output is correct
33 Correct 165 ms 85736 KB Output is correct
34 Correct 423 ms 78628 KB Output is correct
35 Correct 25 ms 74840 KB Output is correct
36 Correct 212 ms 79264 KB Output is correct
37 Correct 24 ms 74924 KB Output is correct
38 Correct 24 ms 74844 KB Output is correct
39 Correct 171 ms 78876 KB Output is correct
40 Correct 21 ms 75100 KB Output is correct
41 Correct 307 ms 78528 KB Output is correct
42 Correct 211 ms 80916 KB Output is correct
43 Correct 20 ms 74584 KB Output is correct
44 Correct 145 ms 85964 KB Output is correct
45 Correct 189 ms 82304 KB Output is correct
46 Correct 22 ms 74804 KB Output is correct
47 Correct 26 ms 74840 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 169 ms 78924 KB Output is correct
2 Correct 247 ms 90816 KB Output is correct
3 Correct 27 ms 75096 KB Output is correct
4 Correct 22 ms 74952 KB Output is correct
5 Correct 20 ms 74584 KB Output is correct
6 Correct 20 ms 74584 KB Output is correct
7 Correct 22 ms 74844 KB Output is correct
8 Incorrect 215 ms 80836 KB Output isn't correct
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 74584 KB Output is correct
2 Correct 22 ms 75032 KB Output is correct
3 Correct 18 ms 74584 KB Output is correct
4 Correct 22 ms 74588 KB Output is correct
5 Correct 19 ms 74584 KB Output is correct
6 Correct 19 ms 74584 KB Output is correct
7 Correct 20 ms 74588 KB Output is correct
8 Correct 18 ms 74776 KB Output is correct
9 Correct 20 ms 74584 KB Output is correct
10 Correct 19 ms 74776 KB Output is correct
11 Correct 19 ms 74584 KB Output is correct
12 Correct 19 ms 74788 KB Output is correct
13 Correct 20 ms 74588 KB Output is correct
14 Correct 20 ms 74588 KB Output is correct
15 Correct 20 ms 74588 KB Output is correct
16 Correct 20 ms 74584 KB Output is correct
17 Correct 21 ms 74808 KB Output is correct
18 Correct 25 ms 74588 KB Output is correct
19 Correct 19 ms 74588 KB Output is correct
20 Correct 19 ms 74588 KB Output is correct
21 Correct 20 ms 74816 KB Output is correct
22 Correct 19 ms 74584 KB Output is correct
23 Correct 19 ms 74796 KB Output is correct
24 Correct 19 ms 74584 KB Output is correct
25 Correct 19 ms 74584 KB Output is correct
26 Correct 22 ms 75096 KB Output is correct
27 Correct 22 ms 74952 KB Output is correct
28 Correct 23 ms 75096 KB Output is correct
29 Correct 24 ms 75172 KB Output is correct
30 Correct 24 ms 74944 KB Output is correct
31 Correct 20 ms 74776 KB Output is correct
32 Correct 22 ms 75352 KB Output is correct
33 Correct 20 ms 74584 KB Output is correct
34 Correct 22 ms 74840 KB Output is correct
35 Correct 22 ms 75292 KB Output is correct
36 Correct 24 ms 74844 KB Output is correct
37 Incorrect 23 ms 74840 KB Output isn't correct
38 Halted 0 ms 0 KB -