제출 #968711

#제출 시각아이디문제언어결과실행 시간메모리
968711MarwenElarbiSimurgh (IOI17_simurgh)C++17
0 / 100
22 ms600 KiB
#include <bits/stdc++.h> #include "simurgh.h" using namespace std; int count_common_roads(const std::vector<int>& r); vector<int> adj[250]; vector<int> p(250); mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int f(int x){ if(x==p[x]) return x; return p[x]=f(p[x]); } bool sameset(int x,int y){ return f(x)==f(y); } void joinset(int x,int y){ x=f(x); y=f(y); p[x]=y; } std::vector<int> find_roads(int n, std::vector<int> u, std::vector<int> v){ int m=u.size(); vector<int> permutation(m); for (int i = 0; i < m; ++i) { permutation[i]=i; } while(true){ vector<int> cur; shuffle(permutation.begin(),permutation.end(),rng); /*for (int i = 0; i < m; ++i) { cout <<permutation[i]<<" "; }cout <<endl;*/ for (int i = 0; i < n; ++i) { p[i]=i; } for (int i = 0; i < m; ++i) { int x=u[permutation[i]]; int y=v[permutation[i]]; if(!sameset(x,y)){ joinset(x,y); cur.push_back(permutation[i]); } } /*for (int i = 0; i < n-1; ++i) { cout <<cur[i]<<" "; }cout <<endl;*/ int cnt=count_common_roads(cur); if(cnt==n-1) return(cur); } }
#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...