답안 #718183

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
718183 2023-04-03T14:48:57 Z bLIC Regions (IOI09_regions) C++17
6 / 100
4703 ms 24556 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 = 600;
int n, r, q;
vvi adj(maxN);
vi regof(maxN);
vvi timing(maxK);
vi st(maxN), en(maxN);
vvi reg(maxK);
vi indof(maxK);
vi heavy(maxK);
vi cont;
vvi 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[indof[regof[node]]]++;
        assert(indof[regof[node]]<hvy);
    }
    timing[regof[node]].push_back(st[node]);
    for (int x:adj[node]){
        for (int i = 0;i<hvy;i++){
            ansforheavy[i][regof[x]] += cont[i];
        }
        dfs(x);
    }
    en[node] = tim;
    if (heavy[regof[node]]){
        cont[indof[regof[node]]]--;
    }
}

ll query(int r1, int r2){
    if (heavy[r1]) return ansforheavy[indof[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;i<=r;i++){
        if (regcont(i)>B){
            heavy[i] = true;
            indof[i] = hvy++;
        }
    }
    ansforheavy.assign(hvy, vi(r+1, 0));
    cont.assign(hvy, 0);
    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:185:14: warning: unused variable 'i' [-Wunused-variable]
  185 |     int t=1, i = 1;
      |              ^
# 결과 실행 시간 메모리 Grader output
1 Runtime error 5 ms 8656 KB Execution killed with signal 13
2 Runtime error 6 ms 8680 KB Execution killed with signal 13
3 Runtime error 5 ms 8656 KB Execution killed with signal 13
4 Correct 7 ms 8656 KB Output is correct
5 Runtime error 10 ms 8748 KB Execution killed with signal 13
6 Runtime error 18 ms 8788 KB Execution killed with signal 13
7 Runtime error 22 ms 8784 KB Execution killed with signal 13
8 Runtime error 36 ms 8784 KB Execution killed with signal 13
9 Runtime error 49 ms 9040 KB Execution killed with signal 13
10 Runtime error 90 ms 9152 KB Execution killed with signal 13
11 Runtime error 144 ms 9296 KB Execution killed with signal 13
12 Runtime error 138 ms 9748 KB Execution killed with signal 13
13 Runtime error 220 ms 9480 KB Execution killed with signal 13
14 Runtime error 315 ms 9872 KB Execution killed with signal 13
15 Runtime error 223 ms 11876 KB Execution killed with signal 13
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1925 ms 12248 KB Execution killed with signal 13
2 Runtime error 2285 ms 11248 KB Execution killed with signal 13
3 Runtime error 3158 ms 13572 KB Execution killed with signal 13
4 Runtime error 305 ms 10028 KB Execution killed with signal 13
5 Correct 422 ms 11180 KB Output is correct
6 Runtime error 1542 ms 10924 KB Execution killed with signal 13
7 Runtime error 1796 ms 11800 KB Execution killed with signal 13
8 Runtime error 1427 ms 15448 KB Execution killed with signal 13
9 Runtime error 2141 ms 16132 KB Execution killed with signal 13
10 Runtime error 4333 ms 19740 KB Execution killed with signal 13
11 Runtime error 4703 ms 15644 KB Execution killed with signal 13
12 Runtime error 1557 ms 17240 KB Execution killed with signal 13
13 Runtime error 2189 ms 17184 KB Execution killed with signal 13
14 Runtime error 2275 ms 18372 KB Execution killed with signal 13
15 Runtime error 3056 ms 20588 KB Execution killed with signal 13
16 Runtime error 3214 ms 24008 KB Execution killed with signal 13
17 Runtime error 2948 ms 24556 KB Execution killed with signal 13