Submission #718141

# Submission time Handle Problem Language Result Execution time Memory
718141 2023-04-03T12:11:46 Z bLIC Regions (IOI09_regions) C++17
0 / 100
8000 ms 130772 KB
/**
 *  Author: Anil Byar
**/

#include <bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>

// using namespace __gnu_pbds;
using namespace std;

// template<class T>
// using ordered_set = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;



#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define sz(x) (int)(x).size()
#define ft first
#define sd second
#define pb push_back

// Source: https://codeforces.com/blog/entry/68809
// { start
void __print(int x) {cerr << x;}
void __print(long x) {cerr << x;}
void __print(long long x) {cerr << x;}
void __print(unsigned x) {cerr << x;}
void __print(unsigned long x) {cerr << x;}
void __print(unsigned long long x) {cerr << x;}
void __print(float x) {cerr << x;}
void __print(double x) {cerr << x;}
void __print(long double x) {cerr << x;}
void __print(char x) {cerr << '\'' << x << '\'';}
void __print(const char *x) {cerr << '"' << x << '"';}
void __print(const string &x) {cerr << '"' << x << '"';}
void __print(bool x) {cerr << (x ? "true" : "false");}

template<typename T, typename V>
void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ','; __print(x.second); cerr << '}';}
template<typename T>
void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), __print(i); cerr << "}";}
void _print() {cerr << "]\n";}
template <typename T, typename... V>
void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
#ifndef ONLINE_JUDGE
#define debug(x...) cerr << "[" << #x << "] = ["; _print(x)
#else
#define debug(x...)
#endif
// } end


typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<pii> vii;
typedef vector<ll> vl;
typedef vector<pll> vll;
typedef vector<vi> vvi;
typedef vector<vii> vvii;
typedef vector<vl> vvl;

#define dbg if(0)

const ll MOD = 1e9+7;
const ll MOD9 = 998244353;
const ll INFLL = 1e18+5;
const int INF = 1e9;

void printbit(int x, int len) {string s="\n";while(len--){s=((x%2)?'1':'0')+s;x/=2;} cout<<s;}
ll power(ll x, ll y, ll mod){if (y==0) return 1;ll ret = power(x, y/2, mod);ret *= ret;ret%=mod;if (y&1) ret *= x;return ret%mod;}
ll modinv(ll x, ll mod = MOD) {return power(x, mod-2, mod);}

template<class T>
istream& operator>>(istream&in, vector<T>&v){
    for (T& x:v) in>>x;
    return in;
}
template<class T>
ostream& operator<<(ostream&out, vector<T>&v){
    for (T& x:v) out<<x<<' ';
    cout<<'\n';
    return out;
}
// use ?: with brackets (?:)
// check for overflow
// think about dp


const int maxN = 2e5+5;
const int maxK = 25005;
const int B = 447;
int n, r, q;
vi adj[maxN];
int regof[maxN];
vi timing[maxK];
int st[maxN], en[maxN];
vi reg[maxK];
int indof[maxK];
int heavy[maxK];
map<int, ll> cont;
map<int, map<int, ll>> ansforheavy;
int tim, hvy;

inline int regcont(int r){return sz(reg[r]);}

void dfs(int node){
    st[node] = tim++;
    if (heavy[regof[node]]){
        cont[regof[node]]++;
    }
    timing[regof[node]].push_back(st[node]);
    for (int x:adj[node]){
        for (auto y:cont){
            ansforheavy[y.ft][regof[x]] += y.sd;
        }
        dfs(x);
    }
    en[node] = tim;
    if (heavy[regof[node]]){
        cont[regof[node]]--;
    }
}

ll query(int r1, int r2){
    if (heavy[r1]) return ansforheavy[r1][r2];
    else {
        ll ans = 0;
        for (int x:reg[r1]){
            ans += lower_bound(all(timing[r2]), en[x])-upper_bound(all(timing[r2]), st[x]);
        }
        return ans;
    }
}

void solve(){
    cin>>n>>r>>q;
    cin>>regof[1];
    reg[regof[1]].push_back(1);
    for (int i = 2;i<=n;i++){
        int p;
        cin>>p>>regof[i];
        reg[regof[i]].push_back(i);
        adj[p].push_back(i);
    }
    
    for (int i = 1, ind = 0;i<=r;i++){
        if (regcont(i)>B){
            heavy[i] = true;
            indof[i] = ind++;
        }
    }
    dfs(1);
    for (int i = 1;i<=r;i++) {
        debug(i, timing[i]);
    }
    while(q--){
        int r1, r2;
        cin>>r1>>r2;
        debug(r1, timing[r1], r2, timing[r2]);
        cout<<query(r1, r2)<<endl;
    }

}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);


#ifdef ONLINE_JUDGE
    freopen("input.in", "r", stdin);
    freopen("output.out", "w", stdout);
    freopen("debug.dbg", "w", stderr);
    int tt = clock();
#endif

    int t=1, i = 1;
    // cin>>t;
    while(t--){
        // cout<<"Case #"<<i++<<": ";
        solve();
        cout<<'\n';
    }
#ifdef ONLINE_JUDGE
    cerr << "TIME = " << (float)(clock() - tt)/CLOCKS_PER_SEC << endl;
    tt = clock();
#endif
}

Compilation message

regions.cpp: In function 'int main()':
regions.cpp:182:14: warning: unused variable 'i' [-Wunused-variable]
  182 |     int t=1, i = 1;
      |              ^
# Verdict Execution time Memory Grader output
1 Runtime error 4 ms 6096 KB Execution killed with signal 13
2 Runtime error 4 ms 6096 KB Execution killed with signal 13
3 Runtime error 12 ms 6224 KB Execution killed with signal 13
4 Runtime error 23 ms 6224 KB Execution killed with signal 13
5 Runtime error 63 ms 6436 KB Execution killed with signal 13
6 Runtime error 76 ms 6548 KB Execution killed with signal 13
7 Runtime error 239 ms 6616 KB Execution killed with signal 13
8 Runtime error 249 ms 6844 KB Execution killed with signal 13
9 Runtime error 546 ms 8472 KB Execution killed with signal 13
10 Runtime error 1209 ms 9112 KB Execution killed with signal 13
11 Runtime error 3018 ms 13648 KB Execution killed with signal 13
12 Runtime error 2877 ms 14796 KB Execution killed with signal 13
13 Runtime error 5080 ms 19172 KB Execution killed with signal 13
14 Execution timed out 8086 ms 27580 KB Time limit exceeded
15 Execution timed out 8031 ms 34576 KB Time limit exceeded
# Verdict Execution time Memory Grader output
1 Execution timed out 8087 ms 33876 KB Time limit exceeded
2 Execution timed out 8016 ms 30900 KB Time limit exceeded
3 Execution timed out 8092 ms 37788 KB Time limit exceeded
4 Execution timed out 8083 ms 27648 KB Time limit exceeded
5 Runtime error 7373 ms 30444 KB Execution killed with signal 13
6 Execution timed out 8066 ms 51112 KB Time limit exceeded
7 Execution timed out 8045 ms 40376 KB Time limit exceeded
8 Execution timed out 8034 ms 99796 KB Time limit exceeded
9 Execution timed out 8042 ms 39680 KB Time limit exceeded
10 Execution timed out 8098 ms 130772 KB Time limit exceeded
11 Execution timed out 8038 ms 37992 KB Time limit exceeded
12 Execution timed out 8045 ms 41720 KB Time limit exceeded
13 Execution timed out 8042 ms 43724 KB Time limit exceeded
14 Execution timed out 8045 ms 62016 KB Time limit exceeded
15 Execution timed out 8073 ms 55388 KB Time limit exceeded
16 Execution timed out 8074 ms 71176 KB Time limit exceeded
17 Execution timed out 8055 ms 88208 KB Time limit exceeded