Submission #411537

# Submission time Handle Problem Language Result Execution time Memory
411537 2021-05-25T13:21:56 Z AugustinasJucas Regions (IOI09_regions) C++14
0 / 100
8000 ms 32996 KB
#include <bits/stdc++.h>
#pragma GCC optimize("O2")
#pragma GCC optimize("avx2")
using namespace std;
const int dydis = 2e5 + 10;
int n, r, q;
vector<int> dideli; // regionai
vector<int> regs[dydis];
int tevas[dydis];
vector<int> gr[dydis];
unordered_map<long long, long long > rem;
int sm[dydis];
int val[dydis];
int kam[dydis];
int sq;
int dbInd = 0;
int kelint[dydis];
int enter[dydis], leave[dydis];
long long dideliuMem1[450][20001], dideliuMem2[450][20001];
void dfs1(int v, int came){
	enter[v] = dbInd++;
	for(auto x : gr[v]){
		if(x == came) continue;
		dfs1(x, v);
	}
	leave[v] = dbInd;
}
bool isAnc(int a, int b){
	return enter[a] <= enter[b] && leave[b] <= leave[a];
}
int kek = 0;
int prm = 0;
void dfs(int v){
//		cout << "v = " << v << endl;
	sm[v] = val[v];
	for(auto x : gr[v]){
		if(x == tevas[v]) continue;
		kek += val[v];
        dfs(x);
        kek -= val[v];
		sm[v] += sm[x];
	}
 
	if(!val[v]){
//		cout << "rem[" << prm+1 << "][" << v+1 << "(" << kam[v]+1 << ")] += " << kek << "\n";
//		cout << "rem[" << v+1 << "(" << kam[v]+1 << ")][" << prm+1 << "] += " << sm[v] << "\n"
		dideliuMem1[prm][kam[v]] += kek;
		dideliuMem2[prm][kam[v]] += sm[v];
	}
}
int dbIndd = 0;
void calc(int ind){
	kelint[ind] = dbIndd++;
//	cout << "nuo " << ind+1 << endl;
	for(int i = 0; i < n; i++) sm[i] = val[i] = 0;
	for(auto x : regs[ind]){
		val[x] = 1;
	}
    kek = 0;
    prm = dbIndd-1;
	dfs(0);
}
long long f(int a, int b){
	if((int)regs[a].size() >= sq){
		int sk = kelint[a];
        return 0;
		return dideliuMem1[sk][b];
	}
	if((int)regs[b].size() >= sq){
		int sk = kelint[b];
        return 0;
		return dideliuMem2[sk][a];
	}
	if(rem.count(a*dydis+b)) {
		return rem[a*dydis+b] ;
	}
	long long ret = 0;
	for(auto x : regs[a]){
		for(auto y : regs[b]){
			ret += isAnc(x, y);
		}
	}
	return rem[a*dydis+b] = ret;
}
int main(){
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);
	cin >> n >> r >> q;
	for(int i = 0; i < n; i++){
		int par = -1, reg;
		if(i == 0) cin >> reg;
		else cin >> par >> reg;
		par--; reg--;
		regs[reg].push_back(i);
		if(par != -2){
			gr[i].push_back(par);
			gr[par].push_back(i);
		}
		tevas[i] = par;
		kam[i] = reg;
	}
	dfs1(0, -1);
	sq = sqrt(n)-200;
	for(int i = 0; i < r; i++){
		if((int)regs[i].size() >= sq){
//			calc(i);
			dideli.push_back(i);
		}
	}
	while(q--){
		int a, b; cin >> a >> b; a--; b--;
		cout << f(a, b) << endl;
	}
	return 0;
}

Compilation message

regions.cpp:3:28: warning: bad option '-favx2' to pragma 'optimize' [-Wpragmas]
    3 | #pragma GCC optimize("avx2")
      |                            ^
regions.cpp:20:26: warning: bad option '-favx2' to attribute 'optimize' [-Wattributes]
   20 | void dfs1(int v, int came){
      |                          ^
regions.cpp:28:24: warning: bad option '-favx2' to attribute 'optimize' [-Wattributes]
   28 | bool isAnc(int a, int b){
      |                        ^
regions.cpp:33:15: warning: bad option '-favx2' to attribute 'optimize' [-Wattributes]
   33 | void dfs(int v){
      |               ^
regions.cpp:52:18: warning: bad option '-favx2' to attribute 'optimize' [-Wattributes]
   52 | void calc(int ind){
      |                  ^
regions.cpp:63:25: warning: bad option '-favx2' to attribute 'optimize' [-Wattributes]
   63 | long long f(int a, int b){
      |                         ^
regions.cpp:85:10: warning: bad option '-favx2' to attribute 'optimize' [-Wattributes]
   85 | int main(){
      |          ^
# Verdict Execution time Memory Grader output
1 Incorrect 6 ms 9672 KB Output isn't correct
2 Incorrect 7 ms 9672 KB Output isn't correct
3 Incorrect 9 ms 9612 KB Output isn't correct
4 Incorrect 8 ms 9708 KB Output isn't correct
5 Incorrect 16 ms 9672 KB Output isn't correct
6 Incorrect 20 ms 9800 KB Output isn't correct
7 Incorrect 32 ms 9800 KB Output isn't correct
8 Incorrect 50 ms 9800 KB Output isn't correct
9 Incorrect 72 ms 10184 KB Output isn't correct
10 Incorrect 108 ms 10184 KB Output isn't correct
11 Incorrect 72 ms 10492 KB Output isn't correct
12 Incorrect 63 ms 10996 KB Output isn't correct
13 Incorrect 176 ms 10968 KB Output isn't correct
14 Incorrect 141 ms 11248 KB Output isn't correct
15 Incorrect 190 ms 13828 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 805 ms 14272 KB Output isn't correct
2 Incorrect 1027 ms 14084 KB Output isn't correct
3 Incorrect 1283 ms 15940 KB Output isn't correct
4 Incorrect 266 ms 11464 KB Output isn't correct
5 Incorrect 385 ms 12948 KB Output isn't correct
6 Incorrect 705 ms 14020 KB Output isn't correct
7 Incorrect 754 ms 14344 KB Output isn't correct
8 Incorrect 837 ms 19680 KB Output isn't correct
9 Incorrect 4142 ms 20540 KB Output isn't correct
10 Incorrect 6290 ms 25996 KB Output isn't correct
11 Incorrect 4850 ms 23808 KB Output isn't correct
12 Incorrect 5218 ms 21648 KB Output isn't correct
13 Execution timed out 8018 ms 23524 KB Time limit exceeded
14 Incorrect 6099 ms 23712 KB Output isn't correct
15 Execution timed out 8070 ms 26644 KB Time limit exceeded
16 Execution timed out 8054 ms 31844 KB Time limit exceeded
17 Execution timed out 8052 ms 32996 KB Time limit exceeded