| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1353837 | Aviansh | BOI Acronym (BOI25_boi) | C++20 | 1095 ms | 580 KiB |
#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);
}
int findRoot(int x){
if(x==root[x])
return x;
return root[x]=findRoot(root[x]);
}
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);
}
root[y]=x;
siz[x]+=siz[y];
return 1;
}
};
const int mxn = 505;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
int grid[n][n];
for(int i = 0;i<n;i++){
for(int j = i;j<n;j++){
cin >> grid[i][j];
}
}
bitset<mxn>uneq[n];
dsu ds(n);
for(int i = 0;i<n;i++){
for(int j = i+1;j<n;j++){
if(grid[i][j]-grid[i][j-1]==1&&grid[i][j-1]==grid[i+1][j]){
ds.unite(i,j);
if((j-i+1)>2&&(grid[i][j]-2!=grid[i+1][j-1])){
uneq[i+1].set(j);
uneq[j].set(i+1);
uneq[j-1].set(i);
uneq[i].set(j-1);
}
}
else{
if(grid[i][j]==1){
uneq[i].set(j);
uneq[j].set(i);
}
}
}
}
for(int root = 0;root<n;root++){
bitset<mxn>b;
for(int i = 0;i<n;i++){
if(ds.findRoot(i)==root){
b|=uneq[i];
}
}
for(int i = 0;i<n;i++){
if(ds.findRoot(i)==root){
uneq[i]=b;
}
}
}
for(int i = 0;i<n;i++){
for(int j = 0;j<n;j++){
for(int k = 0;k<n;k++){
if(uneq[i][j]&&uneq[j][k]&&uneq[i][k]){
for(int l = 0;l<n;l++){
if(uneq[j][l]&&uneq[k][l]){
ds.unite(i,l);
int root = ds.findRoot(i);
bitset<mxn>b;
for(int i = 0;i<n;i++){
if(ds.findRoot(i)==root){
b|=uneq[i];
}
}
for(int i = 0;i<n;i++){
if(ds.findRoot(i)==root){
uneq[i]=b;
}
}
}
}
for(int l = 0;l<n;l++){
if(uneq[i][l]&&uneq[k][l]){
ds.unite(j,l);
int root = ds.findRoot(j);
bitset<mxn>b;
for(int i = 0;i<n;i++){
if(ds.findRoot(i)==root){
b|=uneq[i];
}
}
for(int i = 0;i<n;i++){
if(ds.findRoot(i)==root){
uneq[i]=b;
}
}
}
}
for(int l = 0;l<n;l++){
if(uneq[i][l]&&uneq[j][l]){
ds.unite(k,l);
int root = ds.findRoot(k);
bitset<mxn>b;
for(int i = 0;i<n;i++){
if(ds.findRoot(i)==root){
b|=uneq[i];
}
}
for(int i = 0;i<n;i++){
if(ds.findRoot(i)==root){
uneq[i]=b;
}
}
}
}
}
}
}
}
int ans = 0;
for(int i = 0;i<n;i++){
int x = ds.findRoot(i);
if(ds.siz[x]>ds.siz[ans]){
ans=x;
}
}
for(int i = 0;i<n;i++){
if(ds.findRoot(i)==ans){
cout << i+1 << " ";
}
}
return 0;
}
| # | Result | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Result | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Result | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Result | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Result | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Result | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Result | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
