Submission #1199689

#TimeUsernameProblemLanguageResultExecution timeMemory
1199689AvianshSimurgh (IOI17_simurgh)C++20
13 / 100
15 ms328 KiB
#include "simurgh.h" #include <bits/stdc++.h> using namespace std; struct dsu{ vector<int>root; vector<int>siz; dsu(int n){ root=vector<int>(n); iota(root.begin(),root.end(),0); siz=vector<int>(n,1); } bool unite(int x, int y){ x=findRoot(x); y=findRoot(y); if(x==y) return 0; if(siz[x]<siz[y]){ swap(x,y); } siz[x]+=siz[y]; root[y]=x; return 1; } int findRoot(int x){ if(x==root[x]) return x; return root[x]=findRoot(root[x]); } }; void dfs(int st, vector<array<int,2>>(&g)[], set<int>(&ban), bool vis[]){ vis[st]=1; for(array<int,2>e:g[st]){ if(vis[e[0]]||ban.find(e[1])!=ban.end()) continue; dfs(e[0],g,ban,vis); } } int compCount(vector<array<int,2>>(&g)[], set<int>(&ban), int n){ int ans = 0; bool vis[n]; fill(vis,vis+n,0); for(int i = 0;i<n;i++){ if(!vis[i]){ ans++; dfs(i,g,ban,vis); } } return ans; } vector<int> makeTree(vector<array<int,2>>edges, set<int>(&ban), vector<int>req, int n){ //assuming req is without cycle int m = edges.size(); dsu ds(n); vector<int>ans; for(int i : req){ ans.push_back(i); assert(ds.unite(edges[i][0],edges[i][1])); } for(int i = 0;i<m;i++){ if(ban.find(i)==ban.end()&&ds.unite(edges[i][0],edges[i][1])){ ans.push_back(i); } } return ans; } vector<int> find_roads(int n, vector<int> u, vector<int> v) { vector<int>ans; int m = u.size(); //each edge: {v,edge_index} vector<array<int,2>>g[n]; vector<array<int,2>>edges(m); for(int i = 0;i<m;i++){ int a = u[i]; int b = v[i]; g[a].push_back({b,i}); g[b].push_back({a,i}); edges[i][0]=a; edges[i][1]=b; } for(int i = 0;i<(1<<m);i++){ if(__builtin_popcount(i)!=n-1){ continue; } dsu ds(n); vector<int>curr; for(int j = 0;j<m;j++){ if(i&(1<<j)){ if(!ds.unite(edges[j][0],edges[j][1])){ goto bad; } curr.push_back(j); } } if(count_common_roads(curr)==n-1){ return curr; } bad: continue; } return ans; }
#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...