Submission #431893

# Submission time Handle Problem Language Result Execution time Memory
431893 2021-06-17T16:50:03 Z amunduzbaev Regions (IOI09_regions) C++14
0 / 100
4073 ms 131076 KB
/* made by amunduzbaev */
 
#include "bits/stdc++.h"
 
using namespace std;
 
//~ #include <ext/pb_ds/assoc_container.hpp>
//~ #include <ext/pb_ds/tree_policy.hpp>
//~ using namespace __gnu_pbds;
//~ template<class T> using oset = tree<T, 
//~ null_type, less_equal<T>, rb_tree_tag, 
//~ tree_order_statistics_node_update>;
 
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
#define ub upper_bound
#define lb lower_bound
#define sz(x) (int)x.size()
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(),x.rend()
#define NeedForSpeed ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define vv vector
#define mem(arr, v) memset(arr, v, sizeof arr)
#define int long long
#define degub(x) cout<<#x<<" : "<<x<<"\n"
#define GG cout<<"here"<<endl;
 
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii; 
typedef vector<int> vii;
typedef vector<pii> vpii;
template<class T> bool umin(T& a, const T& b) { return a > b ? a = b, true : false; }
template<class T> bool umax(T& a, const T& b) { return a < b ? a = b, true : false; }
template<int sz> using tut = array<int, sz>;
void usaco(string s) { freopen((s+".in").c_str(),"r",stdin);  
	freopen((s+".out").c_str(),"w",stdout); NeedForSpeed }
 
const int N = 2e5+5;
const int mod = 1e9+7;
const ll inf = 1e18;
const ld Pi = acos(-1);
const int B = 500;
 
#define MULTI 0
int n, m, k, t, q, ans, res, a[N];
int heavy[N], last[N], id[N];
int bs[N / B + 10][N];
int sb[N][N / B + 10];
vii edges[N], cnt[N];
vpii cmp[N];

//~ BIG_SMALL BIG_BIG
int cur;
void bsdfs(int u, int p = -1, int cnt = 0){
	bs[cur][a[u]] += cnt;
	if(id[a[u]] == cur) cnt++;
	for(auto x : edges[u]) bsdfs(x, u, cnt);
}

//~ SMALL_BIG
map<int, int> sbdfs(int u, int p = -1){
	map<int, int> cnt;
	if(heavy[a[u]]) cnt[a[u]]++;
	for(auto x : edges[u]) {
		map<int, int> tmp = sbdfs(x, u);
		if(sz(tmp) > sz(cnt)) swap(cnt, tmp);
		for(auto x : tmp) cnt[x.ff] += x.ss;
	}
	
	if(!heavy[a[u]]){
		for(auto x : cnt) sb[a[u]][x.ff] += x.ss;
	} return cnt;
}

int tin[N], tout[N];
void dfs(int u, int p = -1){
	tin[u] = t++;
	for(auto x : edges[u]) dfs(x, u);
	tout[u] = t - 1;
}

bool par(int a, int b) { return (tin[a] <= tin[b] && tout[b] <= tout[a]); }

void solve(int t_case){
	cin>>n>>m>>q;
	cin>>a[1];
	for(int i=2;i<=n;i++){
		int p; cin>>p>>a[i];
		edges[p].pb(i);
	}
	
	for(int i=1;i<=n;i++) cnt[a[i]].pb(i);
	int last = 1;
	for(int i=1;i<=m;i++){
		if(sz(cnt[i]) > B) heavy[i] = 1, id[i] = last++;
	}
	
	for(int i=1;i<last;i++) cur = i, bsdfs(1);
	sbdfs(1), dfs(1);
	for(int i=1;i<=n;i++) cmp[a[i]].pb({tin[i], tout[i]});
	for(int i=1;i<=m;i++) sort(all(cmp[i]));

	for(int i=1;i<=q;i++){
		int x, b; cin>>x>>b;
		if(heavy[a[x]]) cout<<bs[id[a[x]]][a[b]]<<endl;
		else if(heavy[a[b]]) cout<<sb[a[x]][a[b]]<<endl;
		else { res = 0; 
			//~ SMALL_SMALL
			for(auto tt : cmp[a[x]]){
				int lx = lb(all(cmp[a[b]]), mp(tt.ff, -1ll)) - cmp[a[b]].begin();
				int rx = ub(all(cmp[a[b]]), mp(tt.ss, tt.ss)) - cmp[a[b]].begin();
				res += rx - lx;
			} cout<<res<<endl;
		}
	}
}

signed main(){
	NeedForSpeed
	if(MULTI){
		int t; cin>>t;
		for(int t_case = 1; t_case <= t; t_case++) solve(t_case);
	} else solve(1);
	return 0;
}

Compilation message

regions.cpp: In function 'void usaco(std::string)':
regions.cpp:38:31: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   38 | void usaco(string s) { freopen((s+".in").c_str(),"r",stdin);
      |                        ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
regions.cpp:39:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   39 |  freopen((s+".out").c_str(),"w",stdout); NeedForSpeed }
      |  ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 9 ms 14408 KB Output isn't correct
2 Incorrect 9 ms 14408 KB Output isn't correct
3 Incorrect 11 ms 14408 KB Output isn't correct
4 Incorrect 12 ms 14408 KB Output isn't correct
5 Incorrect 15 ms 14408 KB Output isn't correct
6 Incorrect 23 ms 14624 KB Output isn't correct
7 Incorrect 46 ms 14500 KB Output isn't correct
8 Incorrect 39 ms 14664 KB Output isn't correct
9 Incorrect 53 ms 15852 KB Output isn't correct
10 Incorrect 89 ms 15304 KB Output isn't correct
11 Incorrect 98 ms 15988 KB Output isn't correct
12 Incorrect 153 ms 17096 KB Output isn't correct
13 Incorrect 186 ms 16492 KB Output isn't correct
14 Incorrect 271 ms 17336 KB Output isn't correct
15 Incorrect 348 ms 25892 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 1214 ms 24344 KB Output isn't correct
2 Incorrect 1086 ms 21772 KB Output isn't correct
3 Incorrect 2121 ms 29516 KB Output isn't correct
4 Incorrect 302 ms 17468 KB Output isn't correct
5 Incorrect 410 ms 22476 KB Output isn't correct
6 Incorrect 1396 ms 19668 KB Output isn't correct
7 Incorrect 1366 ms 21396 KB Output isn't correct
8 Incorrect 1922 ms 35864 KB Output isn't correct
9 Incorrect 2495 ms 32064 KB Output isn't correct
10 Incorrect 4054 ms 46184 KB Output isn't correct
11 Incorrect 4073 ms 31092 KB Output isn't correct
12 Incorrect 1167 ms 82596 KB Output isn't correct
13 Incorrect 1498 ms 84804 KB Output isn't correct
14 Incorrect 2174 ms 100604 KB Output isn't correct
15 Incorrect 2489 ms 125932 KB Output isn't correct
16 Runtime error 131 ms 131076 KB Execution killed with signal 9
17 Runtime error 361 ms 131076 KB Execution killed with signal 9