Submission #779186

#TimeUsernameProblemLanguageResultExecution timeMemory
779186andrej246Connecting Supertrees (IOI20_supertrees)C++14
21 / 100
210 ms22464 KiB
#include "supertrees.h" #include <bits/stdc++.h> using namespace std; #define FOR(i,N) for(long long i = 0; (i) < (N); (i)++) #define FORS(i,v,N) for(long long i = v; (i) < (N); (i)++) #define FORI(i,v,N,inc) for(long long i = v; (i) < (N); (i)+=(inc)) #define NL '\n' #define EL cout << NL #define PRINTV(v) for(auto a:(v)) {cout << a << " ";};EL #define PRINTVV(v) for(auto a:(v)) {PRINTV(a);} typedef long long ll; typedef vector<ll> VL; typedef vector<VL> VLL; typedef pair<ll,ll> PL; typedef vector<PL> VPL; typedef vector<VPL> VVPL; int construct(std::vector<std::vector<int>> p) { int n = p.size(); std::vector<std::vector<int>> answer; for (int i = 0; i < n; i++) { std::vector<int> row; row.resize(n); answer.push_back(row); } vector<bool> visited(n,0); FOR(s,n) { if (!visited[s]) { vector<int> branch; vector<int> cycle; vector<int> comp; vector<bool> incycle(n,false); stack<int> st; st.push(s); while(!st.empty()) { int u = st.top(); st.pop(); if (visited[u]) continue; visited[u] = true; bool is_cycle = true; FOR(v,n) { if (v == u) continue; if (p[u][v] >= 1) { is_cycle = is_cycle && (p[u][v] == 2); st.push(v); } } if (is_cycle) { cycle.push_back(u); incycle[u] = true; } else branch.push_back(u); comp.push_back(u); } //PRINTV(branch); //PRINTV(cycle); for (auto u: comp) { for (auto v: comp) { if (p[u][v] == 0) return 0; } } for (auto u: branch) { FOR(v,n) { if (p[u][v] == 2 && !incycle[v]) { return 0; } } } int prev_u = -1; for(auto u: branch) { if (prev_u >= 0) { answer[u][prev_u] = answer[prev_u][u] = 1; } prev_u = u; } int prev_v = prev_u; int first_c = prev_u; for (auto v: cycle) { if (prev_v >= 0) answer[v][prev_v] = answer[prev_v][v] = 1; prev_v = v; if (first_c == -1) first_c = v; } if (prev_v != first_c) answer[first_c][prev_v] = answer[prev_v][first_c] = 1; } } build(answer); return 1; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...