제출 #253622

#제출 시각아이디문제언어결과실행 시간메모리
253622TriPhanSplit the Attractions (IOI19_split)C++14
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> #include <split.h> #define TASK "SPLIT" #define pb push_back #define ii pair<int,int> #define iii pair<ii,int> #define ll long long #define F first #define S second #define FOR(i, a, b) for (int i=a; i<=b; i++) #define FOr(i, a, b) for (int i=a; i<b ; i++) #define FOD(i, a, b) for (int i=a; i>=b; i--) #define FOd(i, a, b) for (int i=a; i>b ; i--) #define vi vector<int> using namespace std; const int N=(int)1e6+7; const int MOD=(int)1e9+7; const ll INF=(ll)1e18+7; vector<int> a[N]; ii A[3]; int visit[N],par[N],sz[N],ans[N],lift[N]; int m,n,T,root; void dfs(int u) { visit[u]=1; sz[u]=1; for (int v:a[u]) { if (visit[v]) { if (v!=par[u]) lift[u]=v; continue; } par[v]=u; dfs(v); sz[u]+=sz[v]; } if (sz[u] >= A[0].F && root==0) root=u; } void DFS(int u,int p) { if (A[T].F) { A[T].F--; ans[u]=A[T].S; } visit[u]=1; for (int v:a[u]) if (v!=p && visit[v]==0) DFS(v,u); } vi find_split(int n, int a, int b, int c, vi p, vi q) { m=sizeof(p); A[0].F=a; A[1].F=b; A[2].F=c; A[0].S=1; A[1].S=2; A[2].S=3; sort(A,A+3); FOR(i,0,m-1) { int u,v; u=p[i]; v=q[i]; ++u; ++v; a[u].pb(v); a[v].pb(u); } dfs(1); vector<int> res; if (par[root]==0) { FOR(i,1,n) res.push_back(0); return res; } for (int v:a[root]) { if (n-sz[root] >= A[0].F) break; if (!lift[v]) continue; par[v]=lift[v]; sz[root]-=sz[v]; } if (n-sz[root] < A[0].F) { FOR(i,1,n) res.push_back(0); return res; } FOR(i,1,n) a[i].clear(); FOR(i,1,n) if (i!=root) { a[par[i]].push_back(i); if (par[i]!=0) a[i].push_back(par[i]); } FOR(i,1,n) visit[i]=0; if (sz[root]>=A[1].F) { T=1; DFS(root,0); T=0; DFS(par[root],0); } else { T=0; DFS(root,0); T=1; DFS(par[root],0); } FOR(i,1,n) if (!ans[i]) ans[i]=A[2].S; FOR(i,1,n) res.push_back(ans[i]); return res; }

컴파일 시 표준 에러 (stderr) 메시지

split.cpp: In function 'std::vector<int> find_split(int, int, int, int, std::vector<int>, std::vector<int>)':
split.cpp:66:12: error: invalid types 'int[int]' for array subscript
         a[u].pb(v);
            ^
split.cpp:67:12: error: invalid types 'int[int]' for array subscript
         a[v].pb(u);
            ^
split.cpp:76:22: error: invalid types 'int[int]' for array subscript
     for (int v:a[root]) {
                      ^
split.cpp:88:12: error: invalid types 'int[int]' for array subscript
         a[i].clear();
            ^
split.cpp:91:21: error: invalid types 'int[int]' for array subscript
             a[par[i]].push_back(i);
                     ^
split.cpp:93:20: error: invalid types 'int[int]' for array subscript
                 a[i].push_back(par[i]);
                    ^
split.cpp:10:22: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
 #define FOR(i, a, b) for (int i=a; i<=b; i++)
                      ^
split.cpp:113:5: note: in expansion of macro 'FOR'
     FOR(i,1,n)
     ^~~
split.cpp:115:2: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
  return res;
  ^~~~~~