답안 #877947

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
877947 2023-11-23T22:27:51 Z vivkostov Jail (JOI22_jail) C++14
26 / 100
969 ms 768064 KB
#include<bits/stdc++.h>
#define endl "\n"
using namespace std;
void speed()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
}
int q,n,m,c,d,a[2000005],b[2000005],child[2000005],machild[2000005],used[2000005],up[2000005],bin[2000005][30],level[2000005],usedl[2000005],in,brr,brj;
vector<int>v[2000005],p[20000005];
void find_child(int beg,int par,int lev)
{
    level[beg]=lev;
    child[beg]++;
    bin[beg][0]=par;
    int w=0;
    for(int i=0;i<v[beg].size();i++)
    {
        w=v[beg][i];
        if(!child[w])
        {
            find_child(w,beg,lev+1);
            child[beg]+=child[w];
            machild[beg]=max(machild[beg],child[w]);
        }
    }
}
void heavylight(int beg,int last)
{
    in++;
    up[beg]=last;
    used[beg]=in;
    int w,ma=0;
    for(int i=0;i<v[beg].size();i++)
    {
        w=v[beg][i];
        if(!used[w]&&child[w]==machild[beg])
        {
            heavylight(w,last);
            break;
        }
    }
    for(int i=0;i<v[beg].size();i++)
    {
        w=v[beg][i];
        if(!used[w])heavylight(w,w);
    }
}
void make_start(int l,int r,int h)
{
    if(l==r)return;
    int mid=(l+r)/2;
    p[h+n].push_back(h*2+n);
    p[h+n].push_back(h*2+1+n);
    make_start(l,mid,h*2);
    make_start(mid+1,r,h*2+1);
}
void make_finish(int l,int r,int h)
{
    if(l==r)return;
    int mid=(l+r)/2;
    p[h*2+n*5].push_back(h+n*5);
    p[h*2+1+n*5].push_back(h+n*5);
    make_finish(l,mid,h*2);
    make_finish(mid+1,r,h*2+1);
}
void update(int l,int r,int ql,int qr,int h,int to,int type)
{
    if(l>qr||r<ql)return;
    if(l>=ql&&r<=qr)
    {
        if(type==1)p[h+n].push_back(to);
        if(type==2)p[to].push_back(h+n*5);
        if(type==3)p[to].push_back(h+n);
        if(type==4)p[h+n*5].push_back(to);
        return;
    }
    int mid=(l+r)/2;
    update(l,mid,ql,qr,h*2,to,type);
    update(mid+1,r,ql,qr,h*2+1,to,type);
}
void make_bin()
{
    for(int j=1;j<=20;j++)
    {
        for(int i=1;i<=n;i++)
        {
            bin[i][j]=bin[bin[i][j-1]][j-1];
        }
    }
}
void add_all()
{
    for(int i=1;i<=m;i++)
    {
        update(1,n,used[a[i]],used[a[i]],1,i,1);
        update(1,n,used[b[i]],used[b[i]],1,i,2);
    }
}
int lca(int x,int y)
{
    if(level[x]>level[y])swap(x,y);
    for(int i=20;i>=0;i--)
    {
        if(level[bin[y][i]]>=level[x])y=bin[y][i];
    }
    if(x==y)return x;
    for(int i=20;i>=0;i--)
    {
        if(bin[x][i]!=bin[y][i])
        {
            x=bin[x][i];
            y=bin[y][i];
        }
    }
    return bin[x][0];
}
void go_up_heavy1(int beg,int lc,int prisoner)
{
    if(level[up[beg]]==level[lc])
    {
        update(1,n,used[up[beg]],used[beg],1,prisoner,3);
        update(1,n,used[up[beg]],used[beg],1,prisoner,4);
        return;
    }
    if(level[up[beg]]>level[lc])
    {
        update(1,n,used[up[beg]],used[beg],1,prisoner,3);
        update(1,n,used[up[beg]],used[beg],1,prisoner,4);
        go_up_heavy1(bin[up[beg]][0],lc,prisoner);
        return;
    }
    update(1,n,used[lc],used[beg],1,prisoner,3);
    update(1,n,used[lc],used[beg],1,prisoner,4);
}
void go_up_heavy2(int beg,int lc,int prisoner)
{
    if(beg==lc)return;
    if(level[up[beg]]==level[lc])
    {
        update(1,n,used[up[beg]],used[beg],1,prisoner,3);
        update(1,n,used[up[beg]],used[beg],1,prisoner,4);
        return;
    }
    if(level[up[beg]]>level[lc])
    {
        update(1,n,used[up[beg]],used[beg],1,prisoner,3);
        update(1,n,used[up[beg]],used[beg],1,prisoner,4);
        go_up_heavy1(bin[up[beg]][0],lc,prisoner);
        return;
    }
    update(1,n,used[lc],used[beg],1,prisoner,3);
    update(1,n,used[lc],used[beg],1,prisoner,4);
}
void add_path()
{
    for(int i=1;i<=m;i++)
    {
        int g=lca(a[i],b[i]);
        go_up_heavy1(a[i],g,i);
        go_up_heavy2(b[i],g,i);
    }
}
void fill_cycle(int beg)
{
    if(beg<=m)brj++;
    usedl[beg]=2;
    int w;
    for(int i=0; i<p[beg].size(); i++)
    {
        w=p[beg][i];
        if(usedl[w]!=2)fill_cycle(w);
    }
}
void find_cycle(int beg)
{
    usedl[beg]=1;
    int w;
    for(int i=0; i<p[beg].size(); i++)
    {
        w=p[beg][i];
        if(!usedl[w])find_cycle(w);
    }
    if(usedl[beg]!=2&&beg<=m)
    {
        fill_cycle(beg);
        if(brj>=2)brr++;
        brj=0;
    }
}
void resh()
{
    find_child(1,0,1);
    heavylight(1,1);
    make_start(1,n,1);
    make_finish(1,n,1);
    add_all();
    make_bin();
    add_path();
    for(int i=1;i<=n*10;i++)
    {
        if(!usedl[i])find_cycle(i);
    }
    /*for(int i=1;i<=48;i++)
    {
        cout<<i<<" | ";
        for(int j=0;j<p[i].size();j++)
        {
            cout<<p[i][j]<<" ";
        }
        cout<<endl;
    }
    */
    if(brr)cout<<"No"<<endl;
    else cout<<"Yes"<<endl;
    for(int i=0;i<=n*10;i++)
    {
        a[i]=0;
        b[i]=0;
        child[i]=0;
        machild[i]=0;
        used[i]=0;
        up[i]=0;
        level[i]=0;
        usedl[i]=0;
        v[i].clear();
        for(int j=0;j<=20;j++)bin[i][j]=0;
    }
    for(int i=0;i<=10*n;i++)p[i].clear();
    in=0;
    brr=0;
    brj=0;
}
void read()
{
    cin>>q;
    for(int z=1;z<=q;z++)
    {
        cin>>n;
        for(int i=1;i<n;i++)
        {
            cin>>c>>d;
            v[c].push_back(d);
            v[d].push_back(c);
        }
        cin>>m;
        for(int i=1;i<=m;i++)
        {
            cin>>a[i]>>b[i];
        }
        resh();
    }
}
int main()
{
    speed();
    read();
    return 0;
}

Compilation message

jail.cpp: In function 'void find_child(int, int, int)':
jail.cpp:18:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   18 |     for(int i=0;i<v[beg].size();i++)
      |                 ~^~~~~~~~~~~~~~
jail.cpp: In function 'void heavylight(int, int)':
jail.cpp:35:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |     for(int i=0;i<v[beg].size();i++)
      |                 ~^~~~~~~~~~~~~~
jail.cpp:44:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |     for(int i=0;i<v[beg].size();i++)
      |                 ~^~~~~~~~~~~~~~
jail.cpp:34:11: warning: unused variable 'ma' [-Wunused-variable]
   34 |     int w,ma=0;
      |           ^~
jail.cpp: In function 'void fill_cycle(int)':
jail.cpp:170:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  170 |     for(int i=0; i<p[beg].size(); i++)
      |                  ~^~~~~~~~~~~~~~
jail.cpp: In function 'void find_cycle(int)':
jail.cpp:180:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  180 |     for(int i=0; i<p[beg].size(); i++)
      |                  ~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 120 ms 517796 KB Output is correct
2 Correct 127 ms 517788 KB Output is correct
3 Correct 126 ms 517724 KB Output is correct
4 Correct 139 ms 517972 KB Output is correct
5 Correct 158 ms 517936 KB Output is correct
6 Correct 123 ms 518188 KB Output is correct
7 Correct 123 ms 518104 KB Output is correct
8 Correct 126 ms 518084 KB Output is correct
9 Correct 189 ms 527948 KB Output is correct
10 Correct 264 ms 719956 KB Output is correct
11 Correct 131 ms 517712 KB Output is correct
12 Correct 200 ms 518048 KB Output is correct
13 Correct 375 ms 726908 KB Output is correct
14 Correct 347 ms 727280 KB Output is correct
15 Correct 554 ms 736848 KB Output is correct
16 Correct 969 ms 768064 KB Output is correct
17 Correct 413 ms 736080 KB Output is correct
18 Correct 443 ms 736596 KB Output is correct
19 Correct 408 ms 732240 KB Output is correct
20 Correct 409 ms 734308 KB Output is correct
21 Correct 413 ms 734160 KB Output is correct
22 Correct 346 ms 723776 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 117 ms 517712 KB Output is correct
2 Correct 113 ms 517712 KB Output is correct
3 Correct 116 ms 517972 KB Output is correct
4 Correct 114 ms 517968 KB Output is correct
5 Correct 116 ms 517972 KB Output is correct
6 Correct 114 ms 517968 KB Output is correct
7 Correct 115 ms 517972 KB Output is correct
8 Correct 116 ms 518112 KB Output is correct
9 Correct 118 ms 518128 KB Output is correct
10 Correct 117 ms 517972 KB Output is correct
11 Correct 118 ms 517972 KB Output is correct
12 Correct 115 ms 517968 KB Output is correct
13 Correct 113 ms 518080 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 117 ms 517712 KB Output is correct
2 Correct 113 ms 517712 KB Output is correct
3 Correct 116 ms 517972 KB Output is correct
4 Correct 114 ms 517968 KB Output is correct
5 Correct 116 ms 517972 KB Output is correct
6 Correct 114 ms 517968 KB Output is correct
7 Correct 115 ms 517972 KB Output is correct
8 Correct 116 ms 518112 KB Output is correct
9 Correct 118 ms 518128 KB Output is correct
10 Correct 117 ms 517972 KB Output is correct
11 Correct 118 ms 517972 KB Output is correct
12 Correct 115 ms 517968 KB Output is correct
13 Correct 113 ms 518080 KB Output is correct
14 Correct 113 ms 517772 KB Output is correct
15 Correct 115 ms 517712 KB Output is correct
16 Correct 123 ms 518196 KB Output is correct
17 Correct 115 ms 517952 KB Output is correct
18 Correct 115 ms 517968 KB Output is correct
19 Correct 113 ms 517712 KB Output is correct
20 Correct 116 ms 518228 KB Output is correct
21 Correct 117 ms 518076 KB Output is correct
22 Correct 116 ms 518196 KB Output is correct
23 Correct 113 ms 517804 KB Output is correct
24 Correct 114 ms 517968 KB Output is correct
25 Correct 117 ms 518092 KB Output is correct
26 Correct 113 ms 518024 KB Output is correct
27 Correct 115 ms 517968 KB Output is correct
28 Correct 114 ms 517712 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 117 ms 517712 KB Output is correct
2 Correct 113 ms 517712 KB Output is correct
3 Correct 116 ms 517972 KB Output is correct
4 Correct 114 ms 517968 KB Output is correct
5 Correct 116 ms 517972 KB Output is correct
6 Correct 114 ms 517968 KB Output is correct
7 Correct 115 ms 517972 KB Output is correct
8 Correct 116 ms 518112 KB Output is correct
9 Correct 118 ms 518128 KB Output is correct
10 Correct 117 ms 517972 KB Output is correct
11 Correct 118 ms 517972 KB Output is correct
12 Correct 115 ms 517968 KB Output is correct
13 Correct 113 ms 518080 KB Output is correct
14 Correct 113 ms 517772 KB Output is correct
15 Correct 115 ms 517712 KB Output is correct
16 Correct 123 ms 518196 KB Output is correct
17 Correct 115 ms 517952 KB Output is correct
18 Correct 115 ms 517968 KB Output is correct
19 Correct 113 ms 517712 KB Output is correct
20 Correct 116 ms 518228 KB Output is correct
21 Correct 117 ms 518076 KB Output is correct
22 Correct 116 ms 518196 KB Output is correct
23 Correct 113 ms 517804 KB Output is correct
24 Correct 114 ms 517968 KB Output is correct
25 Correct 117 ms 518092 KB Output is correct
26 Correct 113 ms 518024 KB Output is correct
27 Correct 115 ms 517968 KB Output is correct
28 Correct 114 ms 517712 KB Output is correct
29 Correct 117 ms 518232 KB Output is correct
30 Correct 124 ms 518384 KB Output is correct
31 Correct 117 ms 518056 KB Output is correct
32 Correct 117 ms 517972 KB Output is correct
33 Correct 116 ms 517968 KB Output is correct
34 Correct 123 ms 518224 KB Output is correct
35 Correct 119 ms 517968 KB Output is correct
36 Correct 119 ms 517976 KB Output is correct
37 Incorrect 117 ms 517972 KB Output isn't correct
38 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 117 ms 517712 KB Output is correct
2 Correct 113 ms 517712 KB Output is correct
3 Correct 116 ms 517972 KB Output is correct
4 Correct 114 ms 517968 KB Output is correct
5 Correct 116 ms 517972 KB Output is correct
6 Correct 114 ms 517968 KB Output is correct
7 Correct 115 ms 517972 KB Output is correct
8 Correct 116 ms 518112 KB Output is correct
9 Correct 118 ms 518128 KB Output is correct
10 Correct 117 ms 517972 KB Output is correct
11 Correct 118 ms 517972 KB Output is correct
12 Correct 115 ms 517968 KB Output is correct
13 Correct 113 ms 518080 KB Output is correct
14 Correct 113 ms 517772 KB Output is correct
15 Correct 115 ms 517712 KB Output is correct
16 Correct 123 ms 518196 KB Output is correct
17 Correct 115 ms 517952 KB Output is correct
18 Correct 115 ms 517968 KB Output is correct
19 Correct 113 ms 517712 KB Output is correct
20 Correct 116 ms 518228 KB Output is correct
21 Correct 117 ms 518076 KB Output is correct
22 Correct 116 ms 518196 KB Output is correct
23 Correct 113 ms 517804 KB Output is correct
24 Correct 114 ms 517968 KB Output is correct
25 Correct 117 ms 518092 KB Output is correct
26 Correct 113 ms 518024 KB Output is correct
27 Correct 115 ms 517968 KB Output is correct
28 Correct 114 ms 517712 KB Output is correct
29 Correct 117 ms 518232 KB Output is correct
30 Correct 124 ms 518384 KB Output is correct
31 Correct 117 ms 518056 KB Output is correct
32 Correct 117 ms 517972 KB Output is correct
33 Correct 116 ms 517968 KB Output is correct
34 Correct 123 ms 518224 KB Output is correct
35 Correct 119 ms 517968 KB Output is correct
36 Correct 119 ms 517976 KB Output is correct
37 Incorrect 117 ms 517972 KB Output isn't correct
38 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 117 ms 517796 KB Output is correct
2 Correct 115 ms 517624 KB Output is correct
3 Correct 114 ms 517784 KB Output is correct
4 Correct 114 ms 517772 KB Output is correct
5 Correct 129 ms 517624 KB Output is correct
6 Correct 117 ms 517940 KB Output is correct
7 Correct 115 ms 517972 KB Output is correct
8 Correct 117 ms 517804 KB Output is correct
9 Correct 114 ms 517716 KB Output is correct
10 Correct 115 ms 517968 KB Output is correct
11 Correct 115 ms 517716 KB Output is correct
12 Correct 121 ms 517968 KB Output is correct
13 Incorrect 169 ms 518224 KB Output isn't correct
14 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 120 ms 517796 KB Output is correct
2 Correct 127 ms 517788 KB Output is correct
3 Correct 126 ms 517724 KB Output is correct
4 Correct 139 ms 517972 KB Output is correct
5 Correct 158 ms 517936 KB Output is correct
6 Correct 123 ms 518188 KB Output is correct
7 Correct 123 ms 518104 KB Output is correct
8 Correct 126 ms 518084 KB Output is correct
9 Correct 189 ms 527948 KB Output is correct
10 Correct 264 ms 719956 KB Output is correct
11 Correct 131 ms 517712 KB Output is correct
12 Correct 200 ms 518048 KB Output is correct
13 Correct 375 ms 726908 KB Output is correct
14 Correct 347 ms 727280 KB Output is correct
15 Correct 554 ms 736848 KB Output is correct
16 Correct 969 ms 768064 KB Output is correct
17 Correct 413 ms 736080 KB Output is correct
18 Correct 443 ms 736596 KB Output is correct
19 Correct 408 ms 732240 KB Output is correct
20 Correct 409 ms 734308 KB Output is correct
21 Correct 413 ms 734160 KB Output is correct
22 Correct 346 ms 723776 KB Output is correct
23 Correct 117 ms 517712 KB Output is correct
24 Correct 113 ms 517712 KB Output is correct
25 Correct 116 ms 517972 KB Output is correct
26 Correct 114 ms 517968 KB Output is correct
27 Correct 116 ms 517972 KB Output is correct
28 Correct 114 ms 517968 KB Output is correct
29 Correct 115 ms 517972 KB Output is correct
30 Correct 116 ms 518112 KB Output is correct
31 Correct 118 ms 518128 KB Output is correct
32 Correct 117 ms 517972 KB Output is correct
33 Correct 118 ms 517972 KB Output is correct
34 Correct 115 ms 517968 KB Output is correct
35 Correct 113 ms 518080 KB Output is correct
36 Correct 113 ms 517772 KB Output is correct
37 Correct 115 ms 517712 KB Output is correct
38 Correct 123 ms 518196 KB Output is correct
39 Correct 115 ms 517952 KB Output is correct
40 Correct 115 ms 517968 KB Output is correct
41 Correct 113 ms 517712 KB Output is correct
42 Correct 116 ms 518228 KB Output is correct
43 Correct 117 ms 518076 KB Output is correct
44 Correct 116 ms 518196 KB Output is correct
45 Correct 113 ms 517804 KB Output is correct
46 Correct 114 ms 517968 KB Output is correct
47 Correct 117 ms 518092 KB Output is correct
48 Correct 113 ms 518024 KB Output is correct
49 Correct 115 ms 517968 KB Output is correct
50 Correct 114 ms 517712 KB Output is correct
51 Correct 117 ms 518232 KB Output is correct
52 Correct 124 ms 518384 KB Output is correct
53 Correct 117 ms 518056 KB Output is correct
54 Correct 117 ms 517972 KB Output is correct
55 Correct 116 ms 517968 KB Output is correct
56 Correct 123 ms 518224 KB Output is correct
57 Correct 119 ms 517968 KB Output is correct
58 Correct 119 ms 517976 KB Output is correct
59 Incorrect 117 ms 517972 KB Output isn't correct
60 Halted 0 ms 0 KB -