Submission #1130909

#TimeUsernameProblemLanguageResultExecution timeMemory
113090979brueMagic Show (APIO24_show)C++20
100 / 100
916 ms198360 KiB
#include "Alice.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; namespace { struct Edge{ int x, y; Edge(){} Edge(int x, int y): x(x), y(y){} }; const int n = 5000, k = 60; vector<Edge> vec[k]; void init(){ for(int i=1; i<=n; i++) for(int j=i+1; j<=n; j++){ vec[rand()%k].push_back(Edge(i, j)); } } struct unionFind{ int par[5002]; void init(int n){ for(int i=1; i<=n; i++) par[i] = i; } int find(int x){ if(x==par[x]) return x; return par[x] = find(par[x]); } void merge(int x, int y){ x=find(x), y=find(y); par[x] = y; } } dsu; vector<pair<int, int> > ans; } vector<pair<int,int> > Alice(){ init(); ll X = setN(n); vector<int> v; for(int d=0; d<k; d++) if((X>>d)&1) v.push_back(d); dsu.init(n); int pnt = 0, m = 0; while(m < n-1){ int x = v[pnt]; while(!vec[x].empty()){ int a = vec[x].back().x, b = vec[x].back().y; vec[x].pop_back(); if(dsu.find(a) == dsu.find(b)) continue; dsu.merge(a, b), m++, ans.push_back(make_pair(a, b)); // printf("%d\n", m); break; } pnt = (pnt + 1) % (int)v.size(); } return ans; }
#include "Bob.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; namespace { struct Edge{ int x, y; Edge(){} Edge(int x, int y): x(x), y(y){} }; const int n = 5000, k = 60; int where[5002][5002]; vector<Edge> vec[k]; void init(){ for(int i=1; i<=n; i++) for(int j=i+1; j<=n; j++){ int w = rand()%k; vec[w].push_back(Edge(i, j)); where[i][j] = where[j][i] = w; } } } ll Bob(vector<pair<int,int>> V){ init(); ll X = 0; for(auto [x, y]: V) X |= 1LL << where[x][y]; return X; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...