답안 #718185

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
718185 2023-04-03T14:59:40 Z bLIC Regions (IOI09_regions) C++17
1 / 100
4165 ms 82924 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;
vvi adj(maxN);
vi regof(maxN);
vvi timing(maxK);
vi st(maxN), en(maxN);
vvi reg(maxK);
vector<bool> heavy(maxK);
unordered_map<int, int> cont;
unordered_map<int, int> ansforheavy[maxK];
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[regof[x]][y.ft] += 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[regof[r2]][regof[r1]];
    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;i<=r;i++){
        if (regcont(i)>B){
            heavy[i] = true;
        }
    }
    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;
        // fflush(stdout);
    }
}

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


// #ifndef 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';
    }
// #ifndef ONLINE_JUDGE
//     cerr << "TIME = " << (float)(clock() - tt)/CLOCKS_PER_SEC << endl;
//     tt = clock();
// #endif
}

Compilation message

regions.cpp: In function 'int main()':
regions.cpp:180:14: warning: unused variable 'i' [-Wunused-variable]
  180 |     int t=1, i = 1;
      |              ^
# 결과 실행 시간 메모리 Grader output
1 Runtime error 5 ms 9808 KB Execution killed with signal 13
2 Runtime error 6 ms 9808 KB Execution killed with signal 13
3 Correct 5 ms 9808 KB Output is correct
4 Runtime error 9 ms 9924 KB Execution killed with signal 13
5 Runtime error 13 ms 9936 KB Execution killed with signal 13
6 Runtime error 17 ms 9948 KB Execution killed with signal 13
7 Runtime error 38 ms 9880 KB Execution killed with signal 13
8 Runtime error 32 ms 9936 KB Execution killed with signal 13
9 Runtime error 52 ms 10704 KB Execution killed with signal 13
10 Runtime error 86 ms 10360 KB Execution killed with signal 13
11 Runtime error 129 ms 10696 KB Execution killed with signal 13
12 Runtime error 157 ms 11288 KB Execution killed with signal 13
13 Runtime error 195 ms 10644 KB Execution killed with signal 13
14 Runtime error 296 ms 11184 KB Execution killed with signal 13
15 Runtime error 267 ms 16084 KB Execution killed with signal 13
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1593 ms 14744 KB Execution killed with signal 13
2 Runtime error 2114 ms 12692 KB Execution killed with signal 13
3 Runtime error 2326 ms 17596 KB Execution killed with signal 13
4 Runtime error 241 ms 11372 KB Execution killed with signal 13
5 Runtime error 427 ms 14332 KB Execution killed with signal 13
6 Runtime error 571 ms 30268 KB Execution killed with signal 13
7 Runtime error 1491 ms 20668 KB Execution killed with signal 13
8 Runtime error 1146 ms 63700 KB Execution killed with signal 13
9 Runtime error 2235 ms 18764 KB Execution killed with signal 13
10 Runtime error 3583 ms 82924 KB Execution killed with signal 13
11 Runtime error 4165 ms 17044 KB Execution killed with signal 13
12 Runtime error 1579 ms 21092 KB Execution killed with signal 13
13 Runtime error 1732 ms 22276 KB Execution killed with signal 13
14 Runtime error 2269 ms 34820 KB Execution killed with signal 13
15 Runtime error 2849 ms 31536 KB Execution killed with signal 13
16 Runtime error 2635 ms 44576 KB Execution killed with signal 13
17 Runtime error 2526 ms 54128 KB Execution killed with signal 13