Submission #54397093
Source Code Expand
Copy
import syssys.setrecursionlimit(10**8)class Scc:def __init__(self,n):self.n = nself.edges = []def add_edge(self,fr,to):assert 0 <= fr < self.nassert 0 <= to < self.nself.edges.append((fr, to))def scc(self):csr_start = [0] * (self.n + 1)csr_elist = [0] * len(self.edges)for fr,to in self.edges:csr_start[fr + 1] += 1for i in range(1,self.n+1):csr_start[i] += csr_start[i-1]counter = csr_start[:]for fr,to in self.edges:
import sys sys.setrecursionlimit(10**8) class Scc: def __init__(self,n): self.n = n self.edges = [] def add_edge(self,fr,to): assert 0 <= fr < self.n assert 0 <= to < self.n self.edges.append((fr, to)) def scc(self): csr_start = [0] * (self.n + 1) csr_elist = [0] * len(self.edges) for fr,to in self.edges: csr_start[fr + 1] += 1 for i in range(1,self.n+1): csr_start[i] += csr_start[i-1] counter = csr_start[:] for fr,to in self.edges: csr_elist[counter[fr]] = to counter[fr] += 1 self.now_ord = self.group_num = 0 self.visited = [] self.low = [0] * self.n self.ord = [-1] * self.n self.ids = [0] * self.n def _dfs(v): self.low[v] = self.ord[v] = self.now_ord self.now_ord += 1 self.visited.append(v) for i in range(csr_start[v], csr_start[v+1]): to = csr_elist[i] if self.ord[to] == -1: _dfs(to) self.low[v] = min(self.low[v], self.low[to]) else: self.low[v] = min(self.low[v], self.ord[to]) if self.low[v] == self.ord[v]: while 1: u = self.visited.pop() self.ord[u] = self.n self.ids[u] = self.group_num if u==v: break self.group_num += 1 for i in range(self.n): if self.ord[i] == -1: _dfs(i) for i in range(self.n): self.ids[i] = self.group_num - 1 - self.ids[i] groups = [[] for _ in range(self.group_num)] for i in range(self.n): groups[self.ids[i]].append(i) return groups N = int(input()) A = list(map(int,input().split())) scc = Scc(N) for i,a in enumerate(A): scc.add_edge(i,a-1) groups = scc.scc() # print(groups) cnt = [0]*N for g in groups[::-1]: l = len(g) if l>1: for i in g: cnt[i] = l else: i = g[0] a = A[i]-1 cnt[i] = cnt[a] + 1 # print(cnt) ans = sum(cnt) print(ans)
Submission Info
Submission Time | |
---|---|
Task | E - Reachability in Functional Graph |
User | do_an |
Language | Python (PyPy 3.10-v7.3.12) |
Score | 450 |
Code Size | 2293 Byte |
Status | AC |
Exec Time | 622 ms |
Memory | 373268 KB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 450 / 450 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt |
All | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_small_00.txt, 01_small_01.txt, 01_small_02.txt, 01_small_03.txt, 01_small_04.txt, 01_small_05.txt, 01_small_06.txt, 01_small_07.txt, 01_small_08.txt, 01_small_09.txt, 02_random_00.txt, 02_random_01.txt, 02_random_02.txt, 02_random_03.txt, 02_random_04.txt, 02_random_05.txt, 02_random_06.txt, 02_random_07.txt, 02_random_08.txt, 02_random_09.txt, 03_large_cycle_00.txt, 03_large_cycle_01.txt, 04_tree_plus_an_edge_00.txt, 04_tree_plus_an_edge_01.txt, 05_many_self_loops_00.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
00_sample_00.txt | AC | 56 ms | 76556 KB |
00_sample_01.txt | AC | 56 ms | 76628 KB |
00_sample_02.txt | AC | 56 ms | 76884 KB |
01_small_00.txt | AC | 58 ms | 76572 KB |
01_small_01.txt | AC | 58 ms | 76596 KB |
01_small_02.txt | AC | 58 ms | 76820 KB |
01_small_03.txt | AC | 60 ms | 76740 KB |
01_small_04.txt | AC | 59 ms | 76588 KB |
01_small_05.txt | AC | 56 ms | 76604 KB |
01_small_06.txt | AC | 56 ms | 76636 KB |
01_small_07.txt | AC | 59 ms | 76944 KB |
01_small_08.txt | AC | 58 ms | 76620 KB |
01_small_09.txt | AC | 59 ms | 76616 KB |
02_random_00.txt | AC | 197 ms | 134852 KB |
02_random_01.txt | AC | 214 ms | 136084 KB |
02_random_02.txt | AC | 227 ms | 139648 KB |
02_random_03.txt | AC | 223 ms | 136176 KB |
02_random_04.txt | AC | 128 ms | 110568 KB |
02_random_05.txt | AC | 223 ms | 136076 KB |
02_random_06.txt | AC | 115 ms | 87732 KB |
02_random_07.txt | AC | 217 ms | 136308 KB |
02_random_08.txt | AC | 210 ms | 133896 KB |
02_random_09.txt | AC | 216 ms | 136492 KB |
03_large_cycle_00.txt | AC | 622 ms | 373268 KB |
03_large_cycle_01.txt | AC | 617 ms | 373012 KB |
04_tree_plus_an_edge_00.txt | AC | 255 ms | 136032 KB |
04_tree_plus_an_edge_01.txt | AC | 251 ms | 136128 KB |
05_many_self_loops_00.txt | AC | 137 ms | 136196 KB |