답안 #877949

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
877949 2023-11-23T22:28:51 Z vivkostov Jail (JOI22_jail) C++14
26 / 100
1046 ms 770876 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 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_heavy1(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:151:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  151 |     for(int i=0; i<p[beg].size(); i++)
      |                  ~^~~~~~~~~~~~~~
jail.cpp: In function 'void find_cycle(int)':
jail.cpp:161:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  161 |     for(int i=0; i<p[beg].size(); i++)
      |                  ~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 116 ms 517716 KB Output is correct
2 Correct 114 ms 517680 KB Output is correct
3 Correct 115 ms 517776 KB Output is correct
4 Correct 137 ms 517968 KB Output is correct
5 Correct 152 ms 517968 KB Output is correct
6 Correct 115 ms 518228 KB Output is correct
7 Correct 115 ms 517968 KB Output is correct
8 Correct 117 ms 518228 KB Output is correct
9 Correct 179 ms 527776 KB Output is correct
10 Correct 259 ms 720344 KB Output is correct
11 Correct 123 ms 517712 KB Output is correct
12 Correct 183 ms 517968 KB Output is correct
13 Correct 366 ms 727088 KB Output is correct
14 Correct 355 ms 727472 KB Output is correct
15 Correct 574 ms 737208 KB Output is correct
16 Correct 1046 ms 770876 KB Output is correct
17 Correct 406 ms 738164 KB Output is correct
18 Correct 429 ms 740176 KB Output is correct
19 Correct 400 ms 736020 KB Output is correct
20 Correct 402 ms 737868 KB Output is correct
21 Correct 411 ms 737960 KB Output is correct
22 Correct 334 ms 727632 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 114 ms 532056 KB Output is correct
2 Correct 114 ms 532084 KB Output is correct
3 Correct 115 ms 532140 KB Output is correct
4 Correct 118 ms 532048 KB Output is correct
5 Correct 114 ms 532056 KB Output is correct
6 Correct 114 ms 531944 KB Output is correct
7 Correct 114 ms 532128 KB Output is correct
8 Correct 114 ms 532052 KB Output is correct
9 Correct 115 ms 532420 KB Output is correct
10 Correct 114 ms 532052 KB Output is correct
11 Correct 113 ms 532028 KB Output is correct
12 Correct 112 ms 532132 KB Output is correct
13 Correct 116 ms 532168 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 114 ms 532056 KB Output is correct
2 Correct 114 ms 532084 KB Output is correct
3 Correct 115 ms 532140 KB Output is correct
4 Correct 118 ms 532048 KB Output is correct
5 Correct 114 ms 532056 KB Output is correct
6 Correct 114 ms 531944 KB Output is correct
7 Correct 114 ms 532128 KB Output is correct
8 Correct 114 ms 532052 KB Output is correct
9 Correct 115 ms 532420 KB Output is correct
10 Correct 114 ms 532052 KB Output is correct
11 Correct 113 ms 532028 KB Output is correct
12 Correct 112 ms 532132 KB Output is correct
13 Correct 116 ms 532168 KB Output is correct
14 Correct 112 ms 532056 KB Output is correct
15 Correct 114 ms 532052 KB Output is correct
16 Correct 116 ms 532140 KB Output is correct
17 Correct 114 ms 532128 KB Output is correct
18 Correct 114 ms 531932 KB Output is correct
19 Correct 113 ms 531868 KB Output is correct
20 Correct 115 ms 532048 KB Output is correct
21 Correct 117 ms 531992 KB Output is correct
22 Correct 115 ms 532228 KB Output is correct
23 Correct 112 ms 532052 KB Output is correct
24 Correct 113 ms 532108 KB Output is correct
25 Correct 117 ms 532036 KB Output is correct
26 Correct 116 ms 532100 KB Output is correct
27 Correct 119 ms 530000 KB Output is correct
28 Correct 112 ms 530052 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 114 ms 532056 KB Output is correct
2 Correct 114 ms 532084 KB Output is correct
3 Correct 115 ms 532140 KB Output is correct
4 Correct 118 ms 532048 KB Output is correct
5 Correct 114 ms 532056 KB Output is correct
6 Correct 114 ms 531944 KB Output is correct
7 Correct 114 ms 532128 KB Output is correct
8 Correct 114 ms 532052 KB Output is correct
9 Correct 115 ms 532420 KB Output is correct
10 Correct 114 ms 532052 KB Output is correct
11 Correct 113 ms 532028 KB Output is correct
12 Correct 112 ms 532132 KB Output is correct
13 Correct 116 ms 532168 KB Output is correct
14 Correct 112 ms 532056 KB Output is correct
15 Correct 114 ms 532052 KB Output is correct
16 Correct 116 ms 532140 KB Output is correct
17 Correct 114 ms 532128 KB Output is correct
18 Correct 114 ms 531932 KB Output is correct
19 Correct 113 ms 531868 KB Output is correct
20 Correct 115 ms 532048 KB Output is correct
21 Correct 117 ms 531992 KB Output is correct
22 Correct 115 ms 532228 KB Output is correct
23 Correct 112 ms 532052 KB Output is correct
24 Correct 113 ms 532108 KB Output is correct
25 Correct 117 ms 532036 KB Output is correct
26 Correct 116 ms 532100 KB Output is correct
27 Correct 119 ms 530000 KB Output is correct
28 Correct 112 ms 530052 KB Output is correct
29 Correct 117 ms 532048 KB Output is correct
30 Correct 121 ms 530260 KB Output is correct
31 Correct 117 ms 532052 KB Output is correct
32 Correct 116 ms 531908 KB Output is correct
33 Correct 114 ms 532048 KB Output is correct
34 Correct 117 ms 532048 KB Output is correct
35 Correct 117 ms 532052 KB Output is correct
36 Correct 115 ms 532116 KB Output is correct
37 Incorrect 117 ms 532048 KB Output isn't correct
38 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 114 ms 532056 KB Output is correct
2 Correct 114 ms 532084 KB Output is correct
3 Correct 115 ms 532140 KB Output is correct
4 Correct 118 ms 532048 KB Output is correct
5 Correct 114 ms 532056 KB Output is correct
6 Correct 114 ms 531944 KB Output is correct
7 Correct 114 ms 532128 KB Output is correct
8 Correct 114 ms 532052 KB Output is correct
9 Correct 115 ms 532420 KB Output is correct
10 Correct 114 ms 532052 KB Output is correct
11 Correct 113 ms 532028 KB Output is correct
12 Correct 112 ms 532132 KB Output is correct
13 Correct 116 ms 532168 KB Output is correct
14 Correct 112 ms 532056 KB Output is correct
15 Correct 114 ms 532052 KB Output is correct
16 Correct 116 ms 532140 KB Output is correct
17 Correct 114 ms 532128 KB Output is correct
18 Correct 114 ms 531932 KB Output is correct
19 Correct 113 ms 531868 KB Output is correct
20 Correct 115 ms 532048 KB Output is correct
21 Correct 117 ms 531992 KB Output is correct
22 Correct 115 ms 532228 KB Output is correct
23 Correct 112 ms 532052 KB Output is correct
24 Correct 113 ms 532108 KB Output is correct
25 Correct 117 ms 532036 KB Output is correct
26 Correct 116 ms 532100 KB Output is correct
27 Correct 119 ms 530000 KB Output is correct
28 Correct 112 ms 530052 KB Output is correct
29 Correct 117 ms 532048 KB Output is correct
30 Correct 121 ms 530260 KB Output is correct
31 Correct 117 ms 532052 KB Output is correct
32 Correct 116 ms 531908 KB Output is correct
33 Correct 114 ms 532048 KB Output is correct
34 Correct 117 ms 532048 KB Output is correct
35 Correct 117 ms 532052 KB Output is correct
36 Correct 115 ms 532116 KB Output is correct
37 Incorrect 117 ms 532048 KB Output isn't correct
38 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 115 ms 532052 KB Output is correct
2 Correct 113 ms 531932 KB Output is correct
3 Correct 113 ms 531976 KB Output is correct
4 Correct 113 ms 532080 KB Output is correct
5 Correct 123 ms 532036 KB Output is correct
6 Correct 113 ms 532132 KB Output is correct
7 Correct 112 ms 532052 KB Output is correct
8 Correct 111 ms 531848 KB Output is correct
9 Correct 114 ms 532048 KB Output is correct
10 Correct 112 ms 531888 KB Output is correct
11 Correct 112 ms 532092 KB Output is correct
12 Correct 116 ms 532188 KB Output is correct
13 Incorrect 166 ms 532048 KB Output isn't correct
14 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 116 ms 517716 KB Output is correct
2 Correct 114 ms 517680 KB Output is correct
3 Correct 115 ms 517776 KB Output is correct
4 Correct 137 ms 517968 KB Output is correct
5 Correct 152 ms 517968 KB Output is correct
6 Correct 115 ms 518228 KB Output is correct
7 Correct 115 ms 517968 KB Output is correct
8 Correct 117 ms 518228 KB Output is correct
9 Correct 179 ms 527776 KB Output is correct
10 Correct 259 ms 720344 KB Output is correct
11 Correct 123 ms 517712 KB Output is correct
12 Correct 183 ms 517968 KB Output is correct
13 Correct 366 ms 727088 KB Output is correct
14 Correct 355 ms 727472 KB Output is correct
15 Correct 574 ms 737208 KB Output is correct
16 Correct 1046 ms 770876 KB Output is correct
17 Correct 406 ms 738164 KB Output is correct
18 Correct 429 ms 740176 KB Output is correct
19 Correct 400 ms 736020 KB Output is correct
20 Correct 402 ms 737868 KB Output is correct
21 Correct 411 ms 737960 KB Output is correct
22 Correct 334 ms 727632 KB Output is correct
23 Correct 114 ms 532056 KB Output is correct
24 Correct 114 ms 532084 KB Output is correct
25 Correct 115 ms 532140 KB Output is correct
26 Correct 118 ms 532048 KB Output is correct
27 Correct 114 ms 532056 KB Output is correct
28 Correct 114 ms 531944 KB Output is correct
29 Correct 114 ms 532128 KB Output is correct
30 Correct 114 ms 532052 KB Output is correct
31 Correct 115 ms 532420 KB Output is correct
32 Correct 114 ms 532052 KB Output is correct
33 Correct 113 ms 532028 KB Output is correct
34 Correct 112 ms 532132 KB Output is correct
35 Correct 116 ms 532168 KB Output is correct
36 Correct 112 ms 532056 KB Output is correct
37 Correct 114 ms 532052 KB Output is correct
38 Correct 116 ms 532140 KB Output is correct
39 Correct 114 ms 532128 KB Output is correct
40 Correct 114 ms 531932 KB Output is correct
41 Correct 113 ms 531868 KB Output is correct
42 Correct 115 ms 532048 KB Output is correct
43 Correct 117 ms 531992 KB Output is correct
44 Correct 115 ms 532228 KB Output is correct
45 Correct 112 ms 532052 KB Output is correct
46 Correct 113 ms 532108 KB Output is correct
47 Correct 117 ms 532036 KB Output is correct
48 Correct 116 ms 532100 KB Output is correct
49 Correct 119 ms 530000 KB Output is correct
50 Correct 112 ms 530052 KB Output is correct
51 Correct 117 ms 532048 KB Output is correct
52 Correct 121 ms 530260 KB Output is correct
53 Correct 117 ms 532052 KB Output is correct
54 Correct 116 ms 531908 KB Output is correct
55 Correct 114 ms 532048 KB Output is correct
56 Correct 117 ms 532048 KB Output is correct
57 Correct 117 ms 532052 KB Output is correct
58 Correct 115 ms 532116 KB Output is correct
59 Incorrect 117 ms 532048 KB Output isn't correct
60 Halted 0 ms 0 KB -