Submission #434332

#TimeUsernameProblemLanguageResultExecution timeMemory
434332MonchitoSimurgh (IOI17_simurgh)C++14
13 / 100
64 ms296 KiB
#include "simurgh.h" #include <iostream> using namespace std; using vi = vector<int>; using vvi = vector<vi>; vi U, V; int N; void DFS(int u, vector<bool>& vis, vvi& G) { vis[u] = true; for(int v : G[u]) { if(!vis[v]) DFS(v, vis, G); } } bool check(vector<int>& edges) { vvi G(N); vector<bool> vis(N, false); for(int i=0; i<N-1; i++) { int j = edges[i]; G[U[j]].push_back(V[j]); G[V[j]].push_back(U[j]); } DFS(0, vis, G); for(int i=0; i<N; i++) if(!vis[i]) return false; return true; } vector<int> find_roads(int n, vi u, vi v) { N = n; int m = (int)u.size(); U = u; V = v; for(int msk=0; msk < (1<<m); msk++) { if(__builtin_popcount(msk) == n-1) { vector<int> edges; for(int i=0; i<m; i++) { if(msk & (1<<i)) edges.push_back(i); } if(check(edges) && count_common_roads(edges) == n-1) return edges; } } return vector<int>(0); }
#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...