Submission #155702

#TimeUsernameProblemLanguageResultExecution timeMemory
155702MercenaryRegions (IOI09_regions)C++14
0 / 100
67 ms12792 KiB
#include<bits/stdc++.h>
#define taskname "UNDRA"
#define pb push_back
#define mp make_pair

using namespace std;
typedef long long ll;
typedef pair<int,int> ii;
const int maxn = 2e5 + 5;
const int maxr = 25005;
const int sqr = 450 + 5;

int bigid[maxr];
int col[maxr];
int n , r , q;
vector<int> adj[maxn];
int big[sqr];
int nBig = 0;
vector<ii> querysmall[maxr];
int precal[sqr][maxr];
int c[maxn];
int cnt[maxr];
int res[maxn];

void DFS(int u){
    if(bigid[c[u]]){
        for(int i = 1 ; i <= r ; ++i){
            precal[bigid[c[u]]][i] += cnt[i];
        }
    }else{
        for(const ii& v : querysmall[c[u]]){
            res[v.second] += cnt[v.first];
        }
    }
    cnt[c[u]]++;
    for(auto & v : adj[u]){
        DFS(v);
    }
    cnt[c[u]]--;
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    if(fopen(taskname".INP","r")){
        freopen(taskname".INP","r",stdin);
        freopen(taskname".OUT","w",stdout);
    }
    cin >> n >> r >> q;
    for(int p , i = 1 ; i <= n ; ++i){
        if(i > 1){
            cin >> p >> c[i];
            adj[p].pb(i);
        }
        else cin >> c[i];
        col[c[i]]++;
    }
    for(int i = 1 ; i <= r ; ++i){
        if(col[i] >= sqr){
            bigid[i] = ++nBig;
            big[nBig] = i;
        }
    }
    for(int r1 , r2,  i = 1 ; i <= q ; ++i){
        cin >> r1 >> r2;
        querysmall[r2].pb(mp(r1 , i));
    }
    DFS(1);
    for(int i = 1 ; i <= nBig ; ++i){
        for(auto & v : querysmall[big[i]]){
            res[v.second] = precal[i][v.first];
        }
    }
    for(int i = 1 ; i <= q ; ++i)cout << res[i] << endl;
}


Compilation message (stderr)

regions.cpp: In function 'int main()':
regions.cpp:46:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
         freopen(taskname".INP","r",stdin);
         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
regions.cpp:47:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
         freopen(taskname".OUT","w",stdout);
         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...