답안 #730719

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
730719 2023-04-26T10:29:20 Z shadow_sami Regions (IOI09_regions) C++17
15 / 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;
        	cout.flush();
        	adj[tp].push_back(i);
        	cin>>col[i];
        	cout.flush();
        }
        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;
        			cout.flush();
        		}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;
        			cout.flush();
        		}
        	}


    // cerr << "Time elapsed: " << setprecision(6) << 1000.0 * clock() / CLOCKS_PER_SEC << "ms\n";
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 12624 KB Output is correct
2 Correct 8 ms 12584 KB Output is correct
3 Correct 10 ms 12624 KB Output is correct
4 Correct 12 ms 12752 KB Output is correct
5 Correct 15 ms 12752 KB Output is correct
6 Correct 39 ms 15028 KB Output is correct
7 Correct 42 ms 13776 KB Output is correct
8 Correct 48 ms 14472 KB Output is correct
9 Correct 93 ms 17304 KB Output is correct
10 Correct 196 ms 20820 KB Output is correct
11 Correct 210 ms 17284 KB Output is correct
12 Correct 313 ms 22724 KB Output is correct
13 Correct 366 ms 19452 KB Output is correct
14 Correct 401 ms 16740 KB Output is correct
15 Correct 403 ms 20192 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 8047 ms 21016 KB Time limit exceeded
2 Execution timed out 8058 ms 20392 KB Time limit exceeded
3 Execution timed out 8034 ms 24712 KB Time limit exceeded
4 Runtime error 808 ms 131072 KB Execution killed with signal 9
5 Runtime error 913 ms 131072 KB Execution killed with signal 9
6 Runtime error 1260 ms 131072 KB Execution killed with signal 9
7 Runtime error 805 ms 131072 KB Execution killed with signal 9
8 Runtime error 1037 ms 131072 KB Execution killed with signal 9
9 Runtime error 966 ms 131072 KB Execution killed with signal 9
10 Runtime error 631 ms 131072 KB Execution killed with signal 9
11 Runtime error 927 ms 131072 KB Execution killed with signal 9
12 Runtime error 1515 ms 131072 KB Execution killed with signal 9
13 Runtime error 1240 ms 131072 KB Execution killed with signal 9
14 Runtime error 1739 ms 131072 KB Execution killed with signal 9
15 Runtime error 798 ms 131072 KB Execution killed with signal 9
16 Runtime error 753 ms 131072 KB Execution killed with signal 9
17 Runtime error 1066 ms 131072 KB Execution killed with signal 9