Submission #1192788

#TimeUsernameProblemLanguageResultExecution timeMemory
1192788Godgift42Park (BOI16_park)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;

vector<int> rt;
vector<int> sz;

int find(int u){
  if(u!=rt[u])rt[u]=find(rt[u]);
  return rt[u];
}

void unite(int u, int v){
  u=find(u);
  v=find(v);
  if(u!=v){
    if(sz[u]>sz[v]){
      rt[v]=u;
      sz[u]+=sz[v];
    }
    else{
      rt[u]=v;
      sz[v]+=sz[u];
    }
  }
}

int main(){
  int n,m;
  cin >> n >> m;
  int w,h;
  cin >> w >> h;
  vector<vector<int>>tr(n,vector<int>(3));
  for(int i=0;i<n;i++){
    cin >> tr[i][0] >> tr[i][1] >> tr[i][2];
  }
  vector<pair<int,pair<int,int>>> p(m);
  for(int i=0;i<m;i++){
    cin >> p[i].first >> p[i].second.first;
    p[i].second.second=i;
  }
  vector<pair<int,pair<int,int>>> el;
  for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
      if(i==j)continue;
      int d=floor(sqrt((tr[i][0]-tr[j][0])*(tr[i][0]-tr[j][0])+(tr[i][1]-tr[j][1])*(tr[i][1]-tr[j][1]))-tr[i][2]-tr[j][2]);
      el.push_back({d,{i,j}});
    }
    int d=floor(tr[i][1]-tr[i][2]);
    el.push_back({d,{i,n}});
    d=floor(w-tr[i][0]-tr[i][2]);
    el.push_back({d,{i,n+1}});
    d=floor(h-tr[i][1]-tr[i][2]);
    el.push_back({d,{i,n+2}});
    d=floor(tr[i][0]-tr[i][2]);
    el.push_back({d,{i,n+3}});
  }
  sort(el.begin(),el.end());
  
  rt.resize(n+4);
  for(int i=0;i<n+4;i++)rt[i]=i;
  sz.resize(n+4,1);
  sort(p.begin(),p.end());
  vector<vector<int>> ans(m);
  int j=0;
  for(int i=0;i<m;i++){
    while(j<el.size() and el[j].first<2*p[i].first){
      unite(el[j].second.first,el[j].second.second);
      j++;
    }
    ans[p[i].second.second].push_back(p[i].second.first);
    if(p[i].second.first==1){
      if(find(n)==find(n+3))continue;
      if(find(n+1)!=find(n+3) and find[n+2)!=find(n+3))ans[p[i].second.second].push_back(4);
      if(find(n+1)!=find(n) and find(n+2)!=find(n))ans[p[i].second.second].push_back(2);
      if(find(n+1)!=find(n+2) and find(n+2)!=find(n) and find(n+1)!=find(n+3))ans[p[i].second.second].push_back(3);
    }
    else if(p[i].second.first==2){
      if(find(n+1)==find(n))continue;
      if(find(n+1)!=find(n+2) and find(n+1)!=find(n+3))ans[p[i].second.second].push_back(3);
      if(find(n+3)!=find(n) and find(n+2)!=find(n))ans[p[i].second.second].push_back(1);
      if(find(n+3)!=find(n+2) and find(n+2)!=find(n) and find(n+1)!=find(n+3))ans[p[i].second.second].push_back(4);
    }
    else if(p[i].second.first==3){
      if(find(n+1)==find(n+2))continue;
      if(find(n+1)!=find(n+3) and find(n)!=find(n+1))ans[p[i].second.second].push_back(2);
      if(find(n+2)!=find(n+3) and find(n+2)!=find(n))ans[p[i].second.second].push_back(4);
      if(find(n)!=find(n+3) and find(n+2)!=find(n) and find(n+1)!=find(n+3))ans[p[i].second.second].push_back(1);
    }
    else{
      if(find(n+2)==find(n+3))continue;
      if(find(n+1)!=find(n+3) and find(n)!=find(n+3))ans[p[i].second.second].push_back(1);
      if(find(n+1)!=find(n+2) and find(n+2)!=find(rt[n]))ans[p[i].second.second].push_back(3);
      if(find(n+1)!=find(n) and find(n+2)!=find(n) and find(n+1)!=find(n+3))ans[p[i].second.second].push_back(2);
    }
  }
  for(int i=0;i<m;i++){
    sort(ans[i].begin(),ans[i].end());
    for(auto o:ans[i])cout <<o;
    cout << "\n";
  }
}

Compilation message (stderr)

park.cpp: In function 'int main()':
park.cpp:73:43: error: expected ']' before ')' token
   73 |       if(find(n+1)!=find(n+3) and find[n+2)!=find(n+3))ans[p[i].second.second].push_back(4);
      |                                           ^
      |                                           ]
park.cpp:73:39: error: invalid types '<unresolved overloaded function type>[int]' for array subscript
   73 |       if(find(n+1)!=find(n+3) and find[n+2)!=find(n+3))ans[p[i].second.second].push_back(4);
      |                                       ^
park.cpp:73:44: error: expected primary-expression before '!=' token
   73 |       if(find(n+1)!=find(n+3) and find[n+2)!=find(n+3))ans[p[i].second.second].push_back(4);
      |                                            ^~