# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1049963 | 2024-08-09T06:24:21 Z | mychecksedad | Connecting Supertrees (IOI20_supertrees) | C++17 | 105 ms | 28044 KB |
#include "supertrees.h" #include<bits/stdc++.h> using namespace std; #define ll long long int #define pb push_back #define vi vector<int> struct Dsu{ vector<int> p, s; Dsu(int n){ p.resize(n+1); s.resize(n+1,1); for(int i = 1; i <= n; ++i ) p[i]=i; } int find(int v){ if(p[v] == v)return v; return p[v]=find(p[v]); } void merge(int a, int b){ a = find(a); b = find(b); if(a != b){ if(s[a]>s[b]) swap(a,b); p[a] = b; s[b] += s[a]; } } }; vector<vector<int>> P; bool solve(vector<int> v, vector<vector<int>> &ans){ if(v.empty()) return 1; for(int u: v){ for(int x: v){ if(P[u][x] == 0 || P[u][x] == 3){ return 0; } } } vector<int> cycle; vector<vector<int>> onepiece; vector<bool> used(v.size()); for(int i = 0; i < v.size(); ++i){ bool fulltwo = 1; if(used[i]) continue; for(int j = i + 1; j < v.size(); ++j){ if(P[v[i]][v[j]] == 1){ fulltwo = 0; onepiece.pb(vector<int>{v[i], v[j]}); used[i] = used[j] = 1; for(int k = j + 1; k < v.size(); ++k){ if(!used[k]){ int co = 0; for(int c: onepiece.back()){ if(P[c][v[k]] == 1){ ++co; } } if(co != 0 && co != onepiece.back().size()){ return 0; } if(co == onepiece.back().size()){ onepiece.back().pb(v[k]); used[k] = 1; } } } } } if(fulltwo) cycle.pb(v[i]); // else assert(false); } for(auto x: onepiece){ for(int j = 0; j + 1 < x.size(); ++j){ ans[x[j]][x[j + 1]] = ans[x[j + 1]][x[j]] = 1; } cycle.pb(x[0]); } if(cycle.size() == 1) return 1; if(cycle.size() == 2) return 0; for(int i = 0; i < cycle.size(); ++i){ ans[cycle[i]][cycle[(i + 1) % cycle.size()]] = ans[cycle[(i + 1) % cycle.size()]][cycle[i]] = 1; } return 1; } int construct(std::vector<std::vector<int>> p) { int n = p.size(); P = p; vector<vector<int>> answer(n, vector<int>(n)); Dsu d(n); for(int i = 0; i < n; ++i){ for(int j = 1; j < n; ++j){ if(p[i][j] > 0) d.merge(i, j); } } vector<vector<int>> C(n); for(int i = 0; i < n; ++i){ C[d.find(i)].pb(i); } for(auto v: C){ bool ok = solve(v, answer); if(!ok) return 0; } build(answer); return 1; }
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 348 KB | Output is correct |
2 | Correct | 0 ms | 348 KB | Output is correct |
3 | Incorrect | 0 ms | 348 KB | Answer gives possible 0 while actual possible 1 |
4 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 348 KB | Output is correct |
2 | Correct | 0 ms | 348 KB | Output is correct |
3 | Incorrect | 0 ms | 348 KB | Answer gives possible 0 while actual possible 1 |
4 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 348 KB | Output is correct |
2 | Correct | 0 ms | 348 KB | Output is correct |
3 | Correct | 0 ms | 348 KB | Output is correct |
4 | Correct | 0 ms | 344 KB | Output is correct |
5 | Correct | 0 ms | 348 KB | Output is correct |
6 | Correct | 0 ms | 348 KB | Output is correct |
7 | Correct | 0 ms | 344 KB | Output is correct |
8 | Correct | 4 ms | 1368 KB | Output is correct |
9 | Correct | 102 ms | 27812 KB | Output is correct |
10 | Correct | 1 ms | 348 KB | Output is correct |
11 | Correct | 0 ms | 348 KB | Output is correct |
12 | Correct | 4 ms | 1476 KB | Output is correct |
13 | Correct | 99 ms | 28044 KB | Output is correct |
14 | Correct | 0 ms | 348 KB | Output is correct |
15 | Correct | 0 ms | 348 KB | Output is correct |
16 | Correct | 2 ms | 1116 KB | Output is correct |
17 | Correct | 53 ms | 18036 KB | Output is correct |
18 | Correct | 0 ms | 348 KB | Output is correct |
19 | Correct | 0 ms | 348 KB | Output is correct |
20 | Correct | 0 ms | 348 KB | Output is correct |
21 | Correct | 25 ms | 7300 KB | Output is correct |
22 | Correct | 97 ms | 28036 KB | Output is correct |
23 | Correct | 105 ms | 27984 KB | Output is correct |
24 | Correct | 101 ms | 27948 KB | Output is correct |
25 | Correct | 42 ms | 18004 KB | Output is correct |
26 | Correct | 52 ms | 18004 KB | Output is correct |
27 | Correct | 100 ms | 27984 KB | Output is correct |
28 | Correct | 102 ms | 27988 KB | Output is correct |
29 | Correct | 46 ms | 18004 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 348 KB | Output is correct |
2 | Correct | 0 ms | 348 KB | Output is correct |
3 | Incorrect | 0 ms | 348 KB | b[1][1] is not 0 |
4 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 348 KB | Output is correct |
2 | Correct | 0 ms | 348 KB | Output is correct |
3 | Incorrect | 0 ms | 348 KB | Answer gives possible 0 while actual possible 1 |
4 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 348 KB | Output is correct |
2 | Correct | 0 ms | 348 KB | Output is correct |
3 | Incorrect | 0 ms | 348 KB | Answer gives possible 0 while actual possible 1 |
4 | Halted | 0 ms | 0 KB | - |