Submission #948438

# Submission time Handle Problem Language Result Execution time Memory
948438 2024-03-18T06:01:50 Z hotboy2703 Tourism (JOI23_tourism) C++14
28 / 100
5000 ms 33404 KB
#include<bits/stdc++.h>
using ll = long long;
#define pll pair <ll,ll>
#define fi first
#define se second
#define sz(a) (ll((a).size()))
#define BIT(mask,i) (((mask) >> (i))&1)
#define MASK(i) (1LL << (i))
#define MP make_pair
using namespace std;
const ll bl_size = 300;
ll n,m,q;
const ll MAXN = 1e5;
const ll MAXK = 17;
ll c[MAXN+100];
struct query{
    ll l,r,id;
};
query all[MAXN+100];
ll ans[MAXN+100];
vector <ll> g[MAXN+100];
ll in[MAXN+100],out[MAXN+100];
ll timeDFS;
ll depth[MAXN+100];
ll sp[MAXK][MAXN+100];
bool anc(ll x,ll y){
    return in[x] <= in[y] && in[y] <= out[x];
}
ll lca(ll x,ll y){
    for (ll j = MAXK - 1;j >= 0;j --){
        if (!anc(sp[j][x],y))x = sp[j][x];
    }
    if (!anc(x,y))x=sp[0][x];
    return x;
}
void dfs(ll u,ll p){
    in[u] = ++timeDFS;
    sp[0][u] = p;
    depth[u] = depth[p] + 1;
    for (auto v:g[u]){
        if (v==p)continue;
        dfs(v,u);
    }
    out[u] = timeDFS;
}
int main(){
    ios_base::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);
    cin>>n>>m>>q;
    for (ll i = 1;i < n;i ++){
        ll u,v;
        cin>>u>>v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    dfs(1,1);
    for (ll j = 1;j < MAXK;j ++){
        for (ll i = 1;i <= n;i ++){
            sp[j][i] = sp[j-1][sp[j-1][i]];
        }
    }
    for (ll i = 1;i <= m;i ++)cin>>c[i];
    for (ll i = 1;i <= q;i ++){
        cin>>all[i].l>>all[i].r;
        all[i].id = i;
    }
    sort(all+1,all+1+q,[](query x,query y){
            x.l /= bl_size;
            y.l /= bl_size;
            if (x.l != y.l)return x.l<y.l;
            else{
                if ((x.l)&1)return x.r < y.r;
                else return x.r > y.r;
            }
         });
    ll cur_l = 1,cur_r = 1;
    multiset <pll> tree({MP(in[c[1]],c[1])});
    ll res = 1;
    auto eval = [&](ll x) -> ll{
        //evaluate if insert x
        ll root = lca((*tree.begin()).se,(*tree.rbegin()).se);
        if (anc(root,x)){
            auto nxt = tree.lower_bound(MP(in[x],x));
            if (nxt == tree.end()){
                nxt = prev(nxt);
            }
            if (anc(x,(*nxt).se))return 0;
            else {
                ll lca1 = lca(x,(*nxt).se);
                ll lca2 = 1;
                if (nxt != tree.begin())lca2 = lca(x,(*prev(nxt)).se);
                if (depth[lca2] > depth[lca1])lca1 = lca2;
                return depth[x] - depth[lca1];
            }
        }
        else{
            return depth[x] + depth[root] - 2 * depth[lca(root,x)];
        }
    };
    auto add = [&](ll x){
        res += eval(x);
        tree.insert(MP(in[x],x));
    };
    auto del = [&](ll x){
        tree.erase(tree.find(MP(in[x],x)));
        res -= eval(x);
    };
    for (ll i = 1;i <= q;i ++){
        ll l = all[i].l,r = all[i].r;
        while (cur_r < r){
            cur_r++;
            add(c[cur_r]);
            //add cur_r
        }
        while (cur_l > l){
            cur_l--;
            add(c[cur_l]);
            //add cur_l
        }
        while (cur_r > r){
            //
            del(c[cur_r]);
            cur_r--;
        }
        while (cur_l < l){
            //
            del(c[cur_l]);
            cur_l++;
        }
        ans[all[i].id] = res;
    }
    for (ll i = 1;i <= q;i ++)cout<<ans[i]<<'\n';
//    cout<<'\n';
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 3 ms 18780 KB Output is correct
2 Correct 2 ms 18776 KB Output is correct
3 Correct 3 ms 18780 KB Output is correct
4 Correct 6 ms 18780 KB Output is correct
5 Correct 5 ms 18936 KB Output is correct
6 Correct 6 ms 18776 KB Output is correct
7 Correct 6 ms 18776 KB Output is correct
8 Correct 5 ms 18776 KB Output is correct
9 Correct 8 ms 19008 KB Output is correct
10 Correct 8 ms 18780 KB Output is correct
11 Correct 8 ms 18776 KB Output is correct
12 Correct 3 ms 18780 KB Output is correct
13 Correct 3 ms 18780 KB Output is correct
14 Correct 3 ms 19188 KB Output is correct
15 Correct 7 ms 18780 KB Output is correct
16 Correct 6 ms 18780 KB Output is correct
17 Correct 7 ms 18780 KB Output is correct
18 Correct 6 ms 18780 KB Output is correct
19 Correct 8 ms 18780 KB Output is correct
20 Correct 6 ms 18780 KB Output is correct
21 Correct 8 ms 18780 KB Output is correct
22 Correct 9 ms 18908 KB Output is correct
23 Correct 8 ms 18776 KB Output is correct
24 Correct 8 ms 18776 KB Output is correct
25 Correct 9 ms 18824 KB Output is correct
26 Correct 8 ms 18780 KB Output is correct
27 Correct 5 ms 18780 KB Output is correct
28 Correct 3 ms 18780 KB Output is correct
29 Correct 4 ms 18956 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 18780 KB Output is correct
2 Correct 2 ms 18776 KB Output is correct
3 Correct 3 ms 18780 KB Output is correct
4 Correct 6 ms 18780 KB Output is correct
5 Correct 5 ms 18936 KB Output is correct
6 Correct 6 ms 18776 KB Output is correct
7 Correct 6 ms 18776 KB Output is correct
8 Correct 5 ms 18776 KB Output is correct
9 Correct 8 ms 19008 KB Output is correct
10 Correct 8 ms 18780 KB Output is correct
11 Correct 8 ms 18776 KB Output is correct
12 Correct 3 ms 18780 KB Output is correct
13 Correct 3 ms 18780 KB Output is correct
14 Correct 3 ms 19188 KB Output is correct
15 Correct 7 ms 18780 KB Output is correct
16 Correct 6 ms 18780 KB Output is correct
17 Correct 7 ms 18780 KB Output is correct
18 Correct 6 ms 18780 KB Output is correct
19 Correct 8 ms 18780 KB Output is correct
20 Correct 6 ms 18780 KB Output is correct
21 Correct 8 ms 18780 KB Output is correct
22 Correct 9 ms 18908 KB Output is correct
23 Correct 8 ms 18776 KB Output is correct
24 Correct 8 ms 18776 KB Output is correct
25 Correct 9 ms 18824 KB Output is correct
26 Correct 8 ms 18780 KB Output is correct
27 Correct 5 ms 18780 KB Output is correct
28 Correct 3 ms 18780 KB Output is correct
29 Correct 4 ms 18956 KB Output is correct
30 Correct 40 ms 19032 KB Output is correct
31 Correct 47 ms 19036 KB Output is correct
32 Correct 61 ms 19244 KB Output is correct
33 Correct 68 ms 19248 KB Output is correct
34 Correct 66 ms 19032 KB Output is correct
35 Correct 8 ms 19172 KB Output is correct
36 Correct 8 ms 19036 KB Output is correct
37 Correct 9 ms 19036 KB Output is correct
38 Correct 36 ms 19292 KB Output is correct
39 Correct 38 ms 19320 KB Output is correct
40 Correct 36 ms 19292 KB Output is correct
41 Correct 7 ms 19288 KB Output is correct
42 Correct 8 ms 19288 KB Output is correct
43 Correct 7 ms 19292 KB Output is correct
44 Correct 39 ms 19036 KB Output is correct
45 Correct 38 ms 19252 KB Output is correct
46 Correct 47 ms 19276 KB Output is correct
47 Correct 9 ms 19288 KB Output is correct
48 Correct 7 ms 19292 KB Output is correct
49 Correct 7 ms 19292 KB Output is correct
50 Correct 60 ms 19272 KB Output is correct
51 Correct 56 ms 19036 KB Output is correct
52 Correct 60 ms 19268 KB Output is correct
53 Correct 59 ms 19036 KB Output is correct
54 Correct 60 ms 19032 KB Output is correct
55 Correct 58 ms 19032 KB Output is correct
56 Correct 25 ms 19032 KB Output is correct
57 Correct 4 ms 19036 KB Output is correct
58 Correct 6 ms 19036 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 18780 KB Output is correct
2 Correct 5 ms 18780 KB Output is correct
3 Correct 32 ms 19032 KB Output is correct
4 Execution timed out 5052 ms 32864 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 18780 KB Output is correct
2 Correct 125 ms 22796 KB Output is correct
3 Correct 202 ms 24660 KB Output is correct
4 Correct 154 ms 24840 KB Output is correct
5 Correct 139 ms 33404 KB Output is correct
6 Correct 266 ms 31572 KB Output is correct
7 Correct 218 ms 28500 KB Output is correct
8 Correct 199 ms 27744 KB Output is correct
9 Correct 217 ms 27984 KB Output is correct
10 Correct 210 ms 27220 KB Output is correct
11 Correct 254 ms 27432 KB Output is correct
12 Correct 293 ms 27216 KB Output is correct
13 Correct 267 ms 27512 KB Output is correct
14 Correct 271 ms 27752 KB Output is correct
15 Correct 284 ms 29028 KB Output is correct
16 Correct 256 ms 30340 KB Output is correct
17 Correct 329 ms 30284 KB Output is correct
18 Correct 254 ms 30336 KB Output is correct
19 Correct 83 ms 33108 KB Output is correct
20 Correct 113 ms 33104 KB Output is correct
21 Correct 110 ms 29368 KB Output is correct
22 Correct 117 ms 28124 KB Output is correct
23 Correct 130 ms 27340 KB Output is correct
24 Correct 128 ms 27100 KB Output is correct
25 Correct 141 ms 27216 KB Output is correct
26 Correct 225 ms 26964 KB Output is correct
27 Correct 202 ms 26948 KB Output is correct
28 Correct 312 ms 26900 KB Output is correct
29 Correct 330 ms 27172 KB Output is correct
30 Correct 315 ms 26972 KB Output is correct
31 Correct 364 ms 27056 KB Output is correct
32 Correct 269 ms 27168 KB Output is correct
33 Correct 290 ms 27440 KB Output is correct
34 Correct 313 ms 28552 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 18780 KB Output is correct
2 Correct 5 ms 18780 KB Output is correct
3 Correct 24 ms 19036 KB Output is correct
4 Execution timed out 5010 ms 31604 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 18780 KB Output is correct
2 Correct 2 ms 18776 KB Output is correct
3 Correct 3 ms 18780 KB Output is correct
4 Correct 6 ms 18780 KB Output is correct
5 Correct 5 ms 18936 KB Output is correct
6 Correct 6 ms 18776 KB Output is correct
7 Correct 6 ms 18776 KB Output is correct
8 Correct 5 ms 18776 KB Output is correct
9 Correct 8 ms 19008 KB Output is correct
10 Correct 8 ms 18780 KB Output is correct
11 Correct 8 ms 18776 KB Output is correct
12 Correct 3 ms 18780 KB Output is correct
13 Correct 3 ms 18780 KB Output is correct
14 Correct 3 ms 19188 KB Output is correct
15 Correct 7 ms 18780 KB Output is correct
16 Correct 6 ms 18780 KB Output is correct
17 Correct 7 ms 18780 KB Output is correct
18 Correct 6 ms 18780 KB Output is correct
19 Correct 8 ms 18780 KB Output is correct
20 Correct 6 ms 18780 KB Output is correct
21 Correct 8 ms 18780 KB Output is correct
22 Correct 9 ms 18908 KB Output is correct
23 Correct 8 ms 18776 KB Output is correct
24 Correct 8 ms 18776 KB Output is correct
25 Correct 9 ms 18824 KB Output is correct
26 Correct 8 ms 18780 KB Output is correct
27 Correct 5 ms 18780 KB Output is correct
28 Correct 3 ms 18780 KB Output is correct
29 Correct 4 ms 18956 KB Output is correct
30 Correct 40 ms 19032 KB Output is correct
31 Correct 47 ms 19036 KB Output is correct
32 Correct 61 ms 19244 KB Output is correct
33 Correct 68 ms 19248 KB Output is correct
34 Correct 66 ms 19032 KB Output is correct
35 Correct 8 ms 19172 KB Output is correct
36 Correct 8 ms 19036 KB Output is correct
37 Correct 9 ms 19036 KB Output is correct
38 Correct 36 ms 19292 KB Output is correct
39 Correct 38 ms 19320 KB Output is correct
40 Correct 36 ms 19292 KB Output is correct
41 Correct 7 ms 19288 KB Output is correct
42 Correct 8 ms 19288 KB Output is correct
43 Correct 7 ms 19292 KB Output is correct
44 Correct 39 ms 19036 KB Output is correct
45 Correct 38 ms 19252 KB Output is correct
46 Correct 47 ms 19276 KB Output is correct
47 Correct 9 ms 19288 KB Output is correct
48 Correct 7 ms 19292 KB Output is correct
49 Correct 7 ms 19292 KB Output is correct
50 Correct 60 ms 19272 KB Output is correct
51 Correct 56 ms 19036 KB Output is correct
52 Correct 60 ms 19268 KB Output is correct
53 Correct 59 ms 19036 KB Output is correct
54 Correct 60 ms 19032 KB Output is correct
55 Correct 58 ms 19032 KB Output is correct
56 Correct 25 ms 19032 KB Output is correct
57 Correct 4 ms 19036 KB Output is correct
58 Correct 6 ms 19036 KB Output is correct
59 Correct 3 ms 18780 KB Output is correct
60 Correct 5 ms 18780 KB Output is correct
61 Correct 32 ms 19032 KB Output is correct
62 Execution timed out 5052 ms 32864 KB Time limit exceeded
63 Halted 0 ms 0 KB -