Submission #306298

#TimeUsernameProblemLanguageResultExecution timeMemory
306298andreiomdConnecting Supertrees (IOI20_supertrees)C++14
0 / 100
1 ms384 KiB
#include "supertrees.h" #include <vector> using namespace std; const int NMAX = 1e3 + 1; int N; int roads[NMAX][NMAX]; vector < int > tree[NMAX], cycle[NMAX]; bool Edge[NMAX][NMAX]; vector < vector < int > > ans; int Id_tree[NMAX]; static inline void Add_Edge (int X, int Y) { Edge[X][Y] = Edge[Y][X] = 1; return; } static inline void DFS (int Node, int Father, int Id) { Id_tree[Id] = Id; for(auto it : tree[Node]) if(it != Father) Add_Edge(Node, it), DFS(it, Node, Id); return; } static inline void Build_trees () { for(int i = 1; i <= N; ++i) if(!tree[i].empty()) DFS(i, -1, i); return; } static inline void Solve () { Build_trees(); return; } static inline void Reconstruct () { for(int i = 1; i <= N; ++i) { vector < int > line; for(int j = 1; j <= N; ++j) line.push_back(Edge[i][j]); ans.push_back(line); } return; } int construct (vector < vector < int > > p) { N = (int)p.size(); for(int i = 0; i < N; ++i) for(int j = 0; j < N; ++j) { roads[i + 1][j + 1] = p[i][j]; if(p[i][j] == 1) tree[i + 1].push_back(j + 1); else if(p[i][j] == 2) cycle[i + 1].push_back(j + 1); else if(p[i][j] == 3) return 0; } Solve(); build(ans); 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...