답안 #730716

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
730716 2023-04-26T10:27:37 Z shadow_sami Regions (IOI09_regions) C++17
0 / 100
8000 ms 131072 KB
#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;
typedef long long int ll;
typedef vector<ll> vi;
typedef vector<vector<ll>> vvi;
typedef pair<ll,ll> pi;
typedef map<ll,ll> mi;
typedef long double ld;
typedef vector<ld> vd;
typedef vector<vector<ld>> vvd;
typedef pair<ld,ld> pd;
#define ff first
#define ss second
#define srt(a) sort(a.begin(),a.end());
#define fip(k, n) for (ll i = k; i < n; i++)
#define fjp(k, n) for (ll j = k; j < n; j++)
#define fin(k, n) for (ll i = k; i >= n; i--)
#define fjn(k, n) for (ll j = k; j >= n; j--)
#define fp(k, n, m) for (ll k = n; k < m; k++)
#define fn(k, n, m) for (ll k = n; k >= m; k--)
#define ordered_set tree<pi, null_type,less< pi >, rb_tree_tag,tree_order_statistics_node_update>
#define totalOne(n) __builtin_popcount(n)
#define backZero(n) __builtin_ctzll(n)
#define frontZero(n) __builtin_clzll(n)
#define fx(k) for ( auto x : k )
#define test ll t;cin >> t;while (t--)
#define nli "\n"

// ==========================(debug)============================================================================================== //

#ifndef ONLINE_JUDGE
#define debug(x) cerr << #x <<" "; _printn(x); cerr << nli;
#else
#define debug(x)
#endif

void _printn(ll x){ cerr<<x<<" "; }
void _printn(int x){ cerr<<x<<" "; }
void _printn(ld x){ cerr<<x<<" "; }
void _printn(double x){ cerr<<x<<" "; }
void _printn(string x){ cerr<<x<<" "; }
void _printn(char x){ cerr<<x<<" "; }
void _printn(bool x){ cerr<<x<<" "; }
template<class T,class V>void _printn(pair<T,V> vv);
template<class T> void _printn(vector<T> vv);
template<class T> void _printn(set<T> vv);
template<class T,class V> void _printn(map<T,V> vv);
template<class T> void _printn(multiset<T> vv);
template<class T,class V>void _printn(pair<T,V> vv){ cerr<<"( ";_printn(vv.ff);cerr<<",";_printn(vv.ss);cerr<<")";}
template<class T> void _printn(vector<T> vv){ cerr<<"[ "; for(auto xx:vv){ _printn(xx);cerr<<" "; } cerr<<"]"; };
template<class T> void _printn(set<T> vv){ cerr<<"{ "; for(auto xx:vv){ _printn(xx);cerr<<" "; } cerr<<"}"; };
template<class T> void _printn(multiset<T> vv){ cerr<<"{ "; for(auto xx:vv){ _printn(xx);cerr<<" "; } cerr<<"}"; };
template<class T,class V> void _printn(map<T,V> vv){ cerr<<"{ "; for(auto xx:vv){ _printn(xx);cerr<<" "; } cerr<<"}"; };

// ==========================(debug)============================================================================================== //

ll n,m,tp,tp2,res,cnt,sum,tptp,ans,q;
const ll mx = 2e5+5;
const ll mx2 = 25000+5;
const ll mod = 1e9+7;
const ll block = 350;

// ==========================(MOD)=============================================================================================== //

ll mod_add(ll aa,ll bb){ return ((aa%mod)+(bb%mod))%mod; }
ll mod_minus(ll aa,ll bb){ return (((aa%mod)-(bb%mod))+10*mod)%mod; }
ll mod_mul(ll aa,ll bb){ return ((aa%mod)*(bb%mod))%mod; }
ll mod_power(ll aa,ll bb){ aa%=mod; ll empowered = 1; bb%=mod-1; while(bb > 0){ if(bb & 1) empowered = mod_mul(empowered,aa); bb = bb >> 1; aa = mod_mul(aa,aa); } return empowered; }
ll mod_divi(ll aa,ll bb){ aa=mod_mul(aa,mod_power(bb,mod-2)); return aa; }

// ==========================(MOD)=============================================================================================== //

bool f = false;
vi adj[mx],v[mx];
ll arr[mx];
ll col[mx];
ll where[mx];
ll start[mx];
ll eend[mx];
unordered_map<ll,ll> umap[mx2];
ll pref[mx];
ll timer = 1;
bool vis[mx];

void dfs(ll u,ll par){
	arr[timer] = u;
	start[u] = timer;
	timer++;
	fx(adj[u])
		if(x!=par)
			dfs(x,u);
	eend[u] = timer-1;
	return;
}


int main(){
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    // #ifndef ONLINE_JUDGE
    //     freopen("input1.txt", "r", stdin);
    //     freopen("output1.txt", "w", stdout);
    //     freopen("error1.txt", "w", stderr);
    // #endif // ONLINE_JUDGE

        cin>>n>>m>>q>>col[1];

        fip(2,n+1){
        	cin>>tp;
        	adj[tp].push_back(i);
        	cin>>col[i];
        }
        dfs(1,-1);
        fip(1,n+1)
        	where[start[i]] = i;
        fip(1,n+1)
        	v[col[i]].push_back(start[i]);
        fip(1,n+1){
        	if(vis[col[i]])
        		continue;
        	srt(v[col[i]]);
        	if(v[col[i]].size()<=block)
        	vis[col[i]] = 1;
        	memset(pref,0,sizeof(pref));
        	fx(v[col[i]]){        		
        		pref[start[where[x]]]++;
        		pref[eend[where[x]]-1]--;
        	}
        	fjp(1,n+1){
        		pref[j] += pref[j-1];
        		umap[col[i]][col[where[j]]] += pref[j];
        	}
        }
        while(q--){
        	ll a,b;
        		cin>>a>>b;
        		if(v[a].size()>block){
        			cout<<umap[a][b]<<nli;
        		}else{
        			ans = 0;
        			fx(v[a]){
        				ll ff = start[where[x]];ll rr = eend[where[x]];
        				ll ptr1,ptr2;
        				ptr1 = upper_bound(v[b].begin(),v[b].end(),ff) - v[b].begin();
        				ptr2 = upper_bound(v[b].begin(),v[b].end(),rr) - v[b].begin();
        				if(ptr2){
        					ptr2--;
        					ans += max(0ll,ptr2-ptr1+1);
        				}
        			}
        			cout<<ans<<nli;
        		}
        	}


    // cerr << "Time elapsed: " << setprecision(6) << 1000.0 * clock() / CLOCKS_PER_SEC << "ms\n";
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 6 ms 12624 KB Time limit exceeded (wall clock)
2 Execution timed out 6 ms 12624 KB Time limit exceeded (wall clock)
3 Execution timed out 7 ms 12624 KB Time limit exceeded (wall clock)
4 Execution timed out 8 ms 12752 KB Time limit exceeded (wall clock)
5 Execution timed out 8 ms 12752 KB Time limit exceeded (wall clock)
6 Execution timed out 22 ms 15056 KB Time limit exceeded (wall clock)
7 Execution timed out 18 ms 13776 KB Time limit exceeded (wall clock)
8 Execution timed out 28 ms 14432 KB Time limit exceeded (wall clock)
9 Execution timed out 57 ms 17400 KB Time limit exceeded (wall clock)
10 Execution timed out 136 ms 20728 KB Time limit exceeded (wall clock)
11 Execution timed out 103 ms 17268 KB Time limit exceeded (wall clock)
12 Execution timed out 189 ms 22668 KB Time limit exceeded (wall clock)
13 Execution timed out 179 ms 19328 KB Time limit exceeded (wall clock)
14 Execution timed out 120 ms 16736 KB Time limit exceeded (wall clock)
15 Execution timed out 154 ms 20040 KB Time limit exceeded (wall clock)
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 8042 ms 20940 KB Time limit exceeded
2 Execution timed out 8036 ms 20380 KB Time limit exceeded
3 Execution timed out 8061 ms 24664 KB Time limit exceeded
4 Runtime error 692 ms 131072 KB Execution killed with signal 9
5 Runtime error 838 ms 131072 KB Execution killed with signal 9
6 Runtime error 1170 ms 131072 KB Execution killed with signal 9
7 Runtime error 798 ms 131072 KB Execution killed with signal 9
8 Runtime error 1031 ms 131072 KB Execution killed with signal 9
9 Runtime error 916 ms 131072 KB Execution killed with signal 9
10 Runtime error 603 ms 131072 KB Execution killed with signal 9
11 Runtime error 819 ms 131072 KB Execution killed with signal 9
12 Runtime error 1556 ms 131072 KB Execution killed with signal 9
13 Runtime error 1196 ms 131072 KB Execution killed with signal 9
14 Runtime error 1571 ms 131072 KB Execution killed with signal 9
15 Runtime error 812 ms 131072 KB Execution killed with signal 9
16 Runtime error 717 ms 131072 KB Execution killed with signal 9
17 Runtime error 1095 ms 131072 KB Execution killed with signal 9