# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
907546 | 2024-01-15T20:37:24 Z | JakobZorz | Parachute rings (IOI12_rings) | C++17 | 1090 ms | 122568 KB |
#include<iostream> #include<vector> #include<unordered_set> using namespace std; int n; vector<int>nodes[(int)1e6]; unordered_set<int>num3; int num4=-1; int num3n[(int)1e6]; int num_cycles; unordered_set<int>cycle; int dsu_parent[(int)1e6]; int dsu_get(int a){ if(dsu_parent[a]<0) return a; return dsu_parent[a]=dsu_get(dsu_parent[a]); } void dsu_merge(int a,int b){ a=dsu_get(a); b=dsu_get(b); if(a==b) return; if(dsu_parent[a]>dsu_parent[b]) swap(a,b); dsu_parent[a]+=dsu_parent[b]; dsu_parent[b]=a; } void Init(int N){ n=N; for(int i=0;i<1e6;i++) dsu_parent[i]=-1; } int cvis; int vis[(int)1e6]; int dfs(int node,int d,int end){ // -1 = dead end int pv=vis[node]; vis[node]=cvis; for(int ne:nodes[node]){ if(ne==end&&d>1) return end; if(vis[ne]!=cvis&&vis[ne]!=0) return ne; if(vis[ne]==0){ int r=dfs(ne,d+1,end); if(r!=-1) return r; } } vis[node]=pv; return -1; } void conn(int a,int b){ nodes[a].push_back(b); if(nodes[a].size()==3){ num3.insert(a); for(int ne:nodes[a]) num3n[ne]++; } if(nodes[a].size()==4){ num3.erase(a); if(num4==-1) num4=a; else num4=-2; for(int ne:nodes[a]) num3n[ne]--; } } void Link(int a,int b){ conn(a,b); conn(b,a); if(dsu_get(a)==dsu_get(b)){ if(num_cycles==0){ cvis++; dfs(a,0,a); for(int i=0;i<1e6;i++) if(vis[i]==cvis){ cycle.insert(i); } num_cycles=1; }else if(num_cycles==1){ unordered_set<int>s; int cnt=0; for(int ne:nodes[a]){ cvis++; int r=dfs(a,0,a); if(r!=-1){ s.insert(r); cnt++; } } if(s.size()!=1||cnt==1){ num_cycles=2; }else{ int center=*s.begin(); if(cycle.count(center)) cycle={center}; else num_cycles=2; } }else{ num_cycles=2; } }else{ dsu_merge(a,b); } } bool check(int i){ bool in_cycle=true; if(num_cycles==1) in_cycle=cycle.count(i); return (num3n[i]==(int)num3.size()||(nodes[i].size()==3&&num3n[i]==(int)num3.size()-1))&&in_cycle; } int CountCritical(){ if(num_cycles>=2) return 0; if(num3.size()>4) return 0; if(num4==-2) return 0; if(num4!=-1){ bool in_cycle=true; if(num_cycles==1) in_cycle=cycle.count(num4); return num3n[num4]==num3.size()&&in_cycle; } if(num3.empty()&&num_cycles==1) return cycle.size(); if(num3.empty()) return n; int res=0; unordered_set<int>s; for(int i:num3){ for(int ne:nodes[i]){ if(check(ne)) s.insert(ne); } if(check(i)) s.insert(i); } return (int)s.size(); }
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 9 ms | 31324 KB | Output is correct |
2 | Correct | 10 ms | 31368 KB | Output is correct |
3 | Correct | 11 ms | 31424 KB | Output is correct |
4 | Correct | 10 ms | 31440 KB | Output is correct |
5 | Correct | 11 ms | 31576 KB | Output is correct |
6 | Correct | 12 ms | 31832 KB | Output is correct |
7 | Correct | 10 ms | 31320 KB | Output is correct |
8 | Correct | 11 ms | 31324 KB | Output is correct |
9 | Correct | 10 ms | 31592 KB | Output is correct |
10 | Correct | 13 ms | 31580 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 237 ms | 47536 KB | Output is correct |
2 | Correct | 638 ms | 58456 KB | Output is correct |
3 | Correct | 1090 ms | 69472 KB | Output is correct |
4 | Correct | 836 ms | 63476 KB | Output is correct |
5 | Correct | 861 ms | 67252 KB | Output is correct |
6 | Correct | 1071 ms | 122568 KB | Output is correct |
7 | Correct | 1012 ms | 69000 KB | Output is correct |
8 | Correct | 790 ms | 62972 KB | Output is correct |
9 | Correct | 833 ms | 64660 KB | Output is correct |
10 | Correct | 505 ms | 63584 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 9 ms | 31324 KB | Output is correct |
2 | Correct | 10 ms | 31368 KB | Output is correct |
3 | Correct | 11 ms | 31424 KB | Output is correct |
4 | Correct | 10 ms | 31440 KB | Output is correct |
5 | Correct | 11 ms | 31576 KB | Output is correct |
6 | Correct | 12 ms | 31832 KB | Output is correct |
7 | Correct | 10 ms | 31320 KB | Output is correct |
8 | Correct | 11 ms | 31324 KB | Output is correct |
9 | Correct | 10 ms | 31592 KB | Output is correct |
10 | Correct | 13 ms | 31580 KB | Output is correct |
11 | Incorrect | 11 ms | 31576 KB | Output isn't correct |
12 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 9 ms | 31324 KB | Output is correct |
2 | Correct | 10 ms | 31368 KB | Output is correct |
3 | Correct | 11 ms | 31424 KB | Output is correct |
4 | Correct | 10 ms | 31440 KB | Output is correct |
5 | Correct | 11 ms | 31576 KB | Output is correct |
6 | Correct | 12 ms | 31832 KB | Output is correct |
7 | Correct | 10 ms | 31320 KB | Output is correct |
8 | Correct | 11 ms | 31324 KB | Output is correct |
9 | Correct | 10 ms | 31592 KB | Output is correct |
10 | Correct | 13 ms | 31580 KB | Output is correct |
11 | Incorrect | 11 ms | 31576 KB | Output isn't correct |
12 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 9 ms | 31324 KB | Output is correct |
2 | Correct | 10 ms | 31368 KB | Output is correct |
3 | Correct | 11 ms | 31424 KB | Output is correct |
4 | Correct | 10 ms | 31440 KB | Output is correct |
5 | Correct | 11 ms | 31576 KB | Output is correct |
6 | Correct | 12 ms | 31832 KB | Output is correct |
7 | Correct | 10 ms | 31320 KB | Output is correct |
8 | Correct | 11 ms | 31324 KB | Output is correct |
9 | Correct | 10 ms | 31592 KB | Output is correct |
10 | Correct | 13 ms | 31580 KB | Output is correct |
11 | Correct | 237 ms | 47536 KB | Output is correct |
12 | Correct | 638 ms | 58456 KB | Output is correct |
13 | Correct | 1090 ms | 69472 KB | Output is correct |
14 | Correct | 836 ms | 63476 KB | Output is correct |
15 | Correct | 861 ms | 67252 KB | Output is correct |
16 | Correct | 1071 ms | 122568 KB | Output is correct |
17 | Correct | 1012 ms | 69000 KB | Output is correct |
18 | Correct | 790 ms | 62972 KB | Output is correct |
19 | Correct | 833 ms | 64660 KB | Output is correct |
20 | Correct | 505 ms | 63584 KB | Output is correct |
21 | Incorrect | 11 ms | 31576 KB | Output isn't correct |
22 | Halted | 0 ms | 0 KB | - |