Submission #1263061

#TimeUsernameProblemLanguageResultExecution timeMemory
1263061sasdeCollapse (JOI18_collapse)C++20
Compilation error
0 ms0 KiB
#include<bits/stdc++.h> #include "collapse.h" using namespace std; #define sz(a) (int)a.size() #define all(x) x.begin(),x.end() #define ii pair<int,int> #define se second #define fi first #define pb push_back #define emb emplace_back const int N=1e6+5,block=400; int index[N]; map<ii,int>M; bool k[N]; struct DSUrollback { struct State { int u, v, rku, rkv, timer,sz; }; int n,sz; vector<int> par, rk; vector<State> history; DSUrollback() : n(0) {} DSUrollback(int _n) : n(_n), par(_n + 5), rk(_n + 5, 0) { history.clear(); sz=0; for (int i = 1; i <= n; ++i) par[i] = i; } void build(int _n) { *this = DSUrollback(_n); } int find(int u) { while (par[u] != u) u = par[u]; return u; } bool join(int u, int v, int timer) { u = find(u); v = find(v); if (u == v) return false; if (rk[u] < rk[v]) std::swap(u, v); history.push_back({u, v, rk[u], rk[v], timer,sz}); ++sz; par[v] = u; if (rk[u] == rk[v]) rk[u]++; return true; } void rollback(int timer) { while (!history.empty() && history.back().timer >= timer) { State s = history.back(); history.pop_back(); par[s.u] = s.u; par[s.v] = s.v; rk[s.u] = s.rku; rk[s.v] = s.rkv; sz=s.sz; } } }; vector<int>up[N],down[N],req[N],upB[N],downB[N]; bool vis[N]; vector<int> simulateCollapse(int node,vector<int>t,vector<int>x,vector<int>y,vector<int>w,vector<int>p){ int query=sz(w),edge=sz(t); vector<int>ans(query); vector<int>vitri(query); iota(all(vitri),0); sort(all(vitri),[&](int x,int y){ return w[x]<w[y]; }); // for(auto x:vitri)cout <<x<<" "; for(int i=0;i<edge;++i){ if(x[i]>y[i])swap(x[i],y[i]); if(t[i]==0)M[{x[i],y[i]}]=i; else index[i]=M[{x[i],y[i]}]; } int j=0; for(int _=0;_<edge;_+=block){ int L=_,R=min(edge-1,_+block-1); vector<int>del,ups,downs,checku(node,0),checkd(node,0); while(j<query&&w[vitri[j]]<=R){ req[p[vitri[j]]].emb(vitri[j]); ++j; } for(int i=L;i<=R;++i){ if(t[i]==0){ upB[y[i]].emb(i); downB[x[i]].emb(i); checkd[x[i]]=1; checku[y[i]]=1; // cout <<node<<" "<<x[i]<<" "<<y[i]<<'\n'; } else if(index[i]<L)del.emb(i),vis[index[i]]=true;; } for(int i=0;i<node;++i){ if(checku[i])ups.emb(i); } for(int i=node-1;i>=0;--i) if(checkd[i])downs.emb(i); DSUrollback dsu(node); for(int i=0;i<node;++i){ for(int j:up[i])if(!vis[j]){ dsu.join(x[j],y[j],-1); } for(int j:req[i]){ for(int k=L;k<=w[j];++k){ if(t[k]==1)vis[index[k]]=true; } for(int dele:del){ if(dele<=w[j])continue; int _dele=index[dele]; if(y[_dele]<=i){ dsu.join(x[_dele],y[_dele],1); } } for(auto k:ups){ if(k>i)break; for(auto l:upB[k]){ if(!vis[l]&&l<=w[j]){ // cout <<x[l]<<" "<<y[l]<<'\n'; dsu.join(x[l],y[l],1); } } } // cout <<i+1<<" "<<dsu.sz<<'\n'; ans[j]+=i+1-dsu.sz; dsu.rollback(1); for(int k=L;k<=w[j];++k){ if(t[k]==1&&index[k]>=L)vis[index[k]]=false; } } } dsu.build(node); for(int i=node-1;i>=0;--i){ for(int j:down[i])if(!vis[j]){ dsu.join(x[j],y[j],-1); } for(int j:req[i]){ for(int k=L;k<=w[j];++k){ if(t[k]==1)vis[index[k]]=true; } for(int dele:del){ if(dele<=w[j])continue; int _dele=index[dele]; if(x[_dele]>i){ dsu.join(x[_dele],y[_dele],1); } } for(auto k:downs){ if(k<=i)break; for(auto l:downB[k]){ if(!vis[l]&&l<=w[j]){ // cout <<x[l]<<" "<<y[l]<<'\n'; dsu.join(x[l],y[l],1); } } } // cout <<i+1<<" "<<dsu.sz<<'\n'; ans[j]+=node-(i+1)-dsu.sz; dsu.rollback(1); for(int k=L;k<=w[j];++k){ if(t[k]==1&&index[k]>=L)vis[index[k]]=false; } } } for(int i=L;i<=R;++i){ up[y[i]].emb(i); down[x[i]].emb(i); } } return ans; } // main() // { // srand(time(0)); // ios_base::sync_with_stdio(false); // cin.tie(NULL); // cout.tie(NULL); // #define task "xs" // if(fopen(task".inp","r")){ // freopen(task".inp","r",stdin); // freopen(task".out","w",stdout); // } // int node; // vector<int>t,x,y,w,q; // cin >> node; // int a,b,c; // while(cin >>a >> b >> c){ // if(!a&&!b&&!c)break; // t.emb(a); // x.emb(b); // y.emb(c); // // cout <<a<<" "<<b<<" "<<c<<'\n'; // } // while(cin >> a >> b){ // w.emb(a); // q.emb(b); // } // vector<int>res=simulateCollapse(node,t,x,y,w,q); // for(auto x:res)cout <<x<<'\n'; // } /* 3 0 1 2 0 1 3 0 2 3 1 2 2 3 */

Compilation message (stderr)

collapse.cpp:12:12: error: 'int index [1000005]' redeclared as different kind of entity
   12 | int index[N];
      |            ^
In file included from /usr/include/string.h:462,
                 from /usr/include/c++/11/cstring:42,
                 from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:48,
                 from collapse.cpp:1:
/usr/include/strings.h:61:1: note: previous declaration 'const char* index(const char*, int)'
   61 | index (const char *__s, int __c) __THROW
      | ^~~~~
collapse.cpp: In function 'std::vector<int> simulateCollapse(int, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
collapse.cpp:79:19: error: invalid types '<unresolved overloaded function type>[int]' for array subscript
   79 |         else index[i]=M[{x[i],y[i]}];
      |                   ^
collapse.cpp:97:26: error: invalid types '<unresolved overloaded function type>[int]' for array subscript
   97 |             else if(index[i]<L)del.emb(i),vis[index[i]]=true;;
      |                          ^
collapse.cpp:97:52: error: invalid types '<unresolved overloaded function type>[int]' for array subscript
   97 |             else if(index[i]<L)del.emb(i),vis[index[i]]=true;;
      |                                                    ^
collapse.cpp:112:41: error: invalid types '<unresolved overloaded function type>[int]' for array subscript
  112 |                     if(t[k]==1)vis[index[k]]=true;
      |                                         ^
collapse.cpp:116:36: error: invalid types '<unresolved overloaded function type>[int]' for array subscript
  116 |                     int _dele=index[dele];
      |                                    ^
collapse.cpp:134:38: error: invalid types '<unresolved overloaded function type>[int]' for array subscript
  134 |                     if(t[k]==1&&index[k]>=L)vis[index[k]]=false;
      |                                      ^
collapse.cpp:134:54: error: invalid types '<unresolved overloaded function type>[int]' for array subscript
  134 |                     if(t[k]==1&&index[k]>=L)vis[index[k]]=false;
      |                                                      ^
collapse.cpp:146:41: error: invalid types '<unresolved overloaded function type>[int]' for array subscript
  146 |                     if(t[k]==1)vis[index[k]]=true;
      |                                         ^
collapse.cpp:150:36: error: invalid types '<unresolved overloaded function type>[int]' for array subscript
  150 |                     int _dele=index[dele];
      |                                    ^
collapse.cpp:168:38: error: invalid types '<unresolved overloaded function type>[int]' for array subscript
  168 |                     if(t[k]==1&&index[k]>=L)vis[index[k]]=false;
      |                                      ^
collapse.cpp:168:54: error: invalid types '<unresolved overloaded function type>[int]' for array subscript
  168 |                     if(t[k]==1&&index[k]>=L)vis[index[k]]=false;
      |                                                      ^