Submission #476915

# Submission time Handle Problem Language Result Execution time Memory
476915 2021-09-29T04:59:58 Z fufu Regions (IOI09_regions) PyPy 3
25 / 100
2208 ms 131076 KB
import resource, sys
resource.setrlimit(resource.RLIMIT_STACK, (2**29,-1))
sys.setrecursionlimit(10**6)
def add(x, v):
	global n, bit
	x += 1
	while x <= n:
		bit[x] += v
		x += x & (-x)

def qry(x):
	global bit
	ret = 0
	x += 1
	while x > 0:
		ret += bit[x]
		x -= x & (-x)
	
	return ret
	
def dfs(c):
	global p, l, r, g
	r[c] = l[c]
	for i in g[c]:
		if i != p[c]:
			l[i] = r[c] + 1
			r[c] = dfs(i)
			
	return r[c]

def main():
	global n
	n, k, q = map(int, input().split())
	m = 447 #sqrt const
	t = 0
	
	global p, l, r, bit, g
	a = [0] * n
	p = [0] * n
	dp = [0] * n
	l = [0] * n
	r = [0] * n
	bit = [0] * (n + 1)
	b = [0] * k
	f1 = [[0 for j in range(k)] for i in range(m)]
	f2 = [[0 for j in range(k)] for i in range(m)]
	g = [[] for i in range(n)]
	w = [[] for i in range(k)]
	
	for i in range(n):
		if i:
			p[i], a[i] = map(int, input().split())
			p[i] -= 1
			g[p[i]].append(i)
		else:
			p[i] = -1
			a[i] = int(input())
		
		a[i] -= 1	
		w[a[i]].append(i)
		
	for i in range(k):
		if len(w[i]) > m:
			for j in range(n):
				if a[j] == i:
					dp[j] = 1
					
				if p[j] != -1:
					dp[j] += dp[p[j]]
				
				f1[t][a[j]] += dp[j]
				
			dp = [0] * (n + 1)
			for j in reversed(range(n)):
				if a[j] == i:
					dp[j] += 1
					
				f2[t][a[j]] += dp[j]
				
				if p[j] != -1:
					dp[p[j]] += dp[j]
					
			b[i] = t
			t += 1
		else:
			b[i] = -1
			
	dfs(0)

	for qq in range(q):
		x, y = map(int, input().split())
		x -= 1
		y -= 1
		
		if b[x] != -1:
			print(f1[b[x]][y])
		elif b[y] != -1:
			print(f2[b[y]][x])
		else:
			ret = 0

			for i in w[y]:
				add(l[i], 1)
			for i in w[x]:
				ret += qry(r[i]) - qry(l[i] - 1)
			for i in w[y]:
				add(l[i], -1)
				
			print(ret)
		
main()
# Verdict Execution time Memory Grader output
1 Correct 64 ms 20648 KB Output is correct
2 Correct 55 ms 19256 KB Output is correct
3 Correct 78 ms 19652 KB Output is correct
4 Correct 121 ms 21692 KB Output is correct
5 Correct 166 ms 24592 KB Output is correct
6 Correct 222 ms 27280 KB Output is correct
7 Correct 248 ms 26404 KB Output is correct
8 Correct 288 ms 28944 KB Output is correct
9 Correct 358 ms 32788 KB Output is correct
10 Correct 516 ms 33708 KB Output is correct
11 Correct 660 ms 30216 KB Output is correct
12 Correct 772 ms 38444 KB Output is correct
13 Correct 1071 ms 34408 KB Output is correct
14 Correct 1738 ms 35628 KB Output is correct
15 Correct 2208 ms 80456 KB Output is correct
# Verdict Execution time Memory Grader output
1 Runtime error 515 ms 56408 KB Execution failed because the return code was nonzero
2 Runtime error 504 ms 56632 KB Execution failed because the return code was nonzero
3 Runtime error 624 ms 91460 KB Execution failed because the return code was nonzero
4 Correct 1705 ms 66804 KB Output is correct
5 Correct 2000 ms 98276 KB Output is correct
6 Incorrect 1733 ms 114888 KB Output isn't correct
7 Runtime error 448 ms 131076 KB Execution killed with signal 9
8 Runtime error 531 ms 131076 KB Execution killed with signal 9
9 Runtime error 153 ms 131076 KB Execution killed with signal 9
10 Runtime error 219 ms 131076 KB Execution killed with signal 9
11 Runtime error 144 ms 131076 KB Execution killed with signal 9
12 Runtime error 163 ms 131076 KB Execution killed with signal 9
13 Runtime error 150 ms 131076 KB Execution killed with signal 9
14 Runtime error 150 ms 131076 KB Execution killed with signal 9
15 Runtime error 147 ms 131076 KB Execution killed with signal 9
16 Runtime error 174 ms 131076 KB Execution killed with signal 9
17 Runtime error 148 ms 131076 KB Execution killed with signal 9