답안 #799768

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
799768 2023-08-01T00:47:42 Z Haidara Regions (IOI09_regions) C++17
70 / 100
8000 ms 51600 KB
/** * * * * * * * * * * * * * * * **\
 *                                 *
 *     Author: Haidara Nassour     *
 *  Coded in: YYYY\MM\DD HH:MM:SS  *
 *         Language: C++22         *
 *                                 *
\** * * * * * * * * * * * * * * * **/
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
#define FAST ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define int long long
#define itn int
#define endl '\n'
#define rep(i,x,n) for(int i=(x);i<(n);i++)
#define FOR(i,n) rep(i,0,n)
#define repf(i,x,n) for(int i=(x);(n);i++)
#define per(i,x,n) for(int i=(x);i>(n);i--)
#define ROF(i,x) for(int i=x;i>=0;i--)
#define v(i) vector< i >
#define p(i,j) pair< i , j >
#define pii pair<int,int>
#define m(i,j) map< i , j >
#define um(i,j) unordered_map< i , j >
#define max_heap(i) priority_queue< i >
#define min_heap(i) priority_queue< i , vector< i > ,greater< i > >
#define ff first
#define sinf(x) const int inf=x;
#define smaxn(x) const int maxn=x;
#define ss second
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define pp push_back
#define mini(x,y) x=min(x,y)
#define maxi(x,y) x=max(x,y)
#define debug(x) cout<<endl<<#x<<"="<<x<<endl;
#define point(x) complex< x >
#define X real()
#define mp make_pair
#define Y imag()
#define add(x,y) x=(x+(y%mod))%mod
using namespace std;
using namespace __gnu_pbds;
void SIO(string name="",string name2="",string later="",string later2="")
{
    if(later=="")
    {
        later=".in";
        later2=".out";
    }
    else
    {
        if(later2=="")
            later2=later;
    }
    if(name!="")
    {
        if(name2=="")
            freopen((name+later).c_str(),"r",stdin);
        else
        {
            freopen((name+later).c_str(),"r",stdin);
            freopen((name2+later2).c_str(),"w",stdout);
        }
    }
}
template <class T> using o_set = tree<T, null_type, less<T>,rb_tree_tag, tree_order_statistics_node_update>;
template <class T> using o_multiset = tree<T, null_type, less_equal<T>,rb_tree_tag, tree_order_statistics_node_update>;
///order_of_key = find index of element x ( returned val is integer )
///find_by_order = find value at index x ( returned val is pointer )
/// to swap s1 and s2 we make the following: s1.swap(s2)
template<class T> T chmin(T &a,T b)
{
    if(b<a)
        a=b;
    return a;
}
template<class T> T chmax(T &a,T b)
{
    if(a<b)
        a=b;
    return a;
}
template<class T> T mxmn(T &a,T &b)
{
    int mx=max(a,b);
    int mn=min(a,b);
    a=mx,b=mn;
    return mx+mn;
}
const double pi=2.0*acos(0.0);
const double memory=1048576.0;
const int inf=1LL<<50LL;
const int mod=1e9+7;
const int maxn=200100;
int n,R,cnt[maxn],r[maxn];
int in[maxn],out[maxn];
int tim=1;
v(int)graph[maxn],em[maxn],emofr[maxn];
void dfs(int st=1,int par=-1)
{
    in[st]=tim++;
    emofr[r[st]].pp(in[st]);
    em[r[st]].pp(st);
    for(auto i:graph[st])
    {
        if(i==par)
            continue;
        dfs(i,st);
    }
    out[st]=tim++;
}
m(int,int)ans[maxn];
signed main()
{
    int q;
    cin>>n>>R>>q;
    cin>>r[1];
    cnt[r[1]]++;
    rep(i,2,n+1)
    {
        int j;
        cin>>j>>r[i];
        cnt[r[i]]++;
        graph[i].pp(j);
        graph[j].pp(i);
    }
    dfs();
    rep(i,1,R+1)
    if(cnt[i]>=500)
        rep(j,1,R+1)
        if(i!=j)
            for(auto k:em[i])
        {
            const auto &v=emofr[j];
            ans[i][j]+=lower_bound(all(v),out[k])-upper_bound(all(v),in[k]);
        }
    while(q--)
    {
        int r1,r2;
        cin>>r1>>r2;
        if(cnt[r1]>=500)
            cout<<ans[r1][r2]<<endl;
        else
        {
            int res=0;
            const auto &v=emofr[r2];
            for(auto i:em[r1])
            {
                res+=lower_bound(all(v),out[i])-upper_bound(all(v),in[i]);
            }
            cout<<res<<endl;
        }
        cout<<flush;
    }
}
/**
5 2
10
1
1 1
1 2
1 2
2 2
1 1

**/

Compilation message

regions.cpp: In function 'void SIO(std::string, std::string, std::string, std::string)':
regions.cpp:59:20: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   59 |             freopen((name+later).c_str(),"r",stdin);
      |             ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
regions.cpp:62:20: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   62 |             freopen((name+later).c_str(),"r",stdin);
      |             ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
regions.cpp:63:20: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   63 |             freopen((name2+later2).c_str(),"w",stdout);
      |             ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 23760 KB Output is correct
2 Correct 11 ms 23808 KB Output is correct
3 Correct 12 ms 23760 KB Output is correct
4 Correct 13 ms 23760 KB Output is correct
5 Correct 16 ms 23868 KB Output is correct
6 Correct 30 ms 23908 KB Output is correct
7 Correct 34 ms 23888 KB Output is correct
8 Correct 38 ms 23948 KB Output is correct
9 Correct 47 ms 24420 KB Output is correct
10 Correct 61 ms 24608 KB Output is correct
11 Correct 116 ms 24968 KB Output is correct
12 Correct 137 ms 25616 KB Output is correct
13 Correct 157 ms 25936 KB Output is correct
14 Correct 223 ms 26388 KB Output is correct
15 Correct 273 ms 28840 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1906 ms 30324 KB Output is correct
2 Correct 2056 ms 30528 KB Output is correct
3 Correct 2639 ms 32316 KB Output is correct
4 Correct 252 ms 26412 KB Output is correct
5 Correct 384 ms 27920 KB Output is correct
6 Correct 4277 ms 36536 KB Output is correct
7 Correct 1393 ms 30024 KB Output is correct
8 Correct 1997 ms 36864 KB Output is correct
9 Correct 1802 ms 37600 KB Output is correct
10 Correct 3521 ms 41724 KB Output is correct
11 Correct 3181 ms 41260 KB Output is correct
12 Execution timed out 8098 ms 39292 KB Time limit exceeded
13 Execution timed out 8085 ms 40428 KB Time limit exceeded
14 Execution timed out 8103 ms 43376 KB Time limit exceeded
15 Execution timed out 8016 ms 43492 KB Time limit exceeded
16 Execution timed out 8042 ms 48520 KB Time limit exceeded
17 Execution timed out 8029 ms 51600 KB Time limit exceeded