제출 #1021913

#제출 시각아이디문제언어결과실행 시간메모리
1021913nisanduuSplit the Attractions (IOI19_split)C++14
컴파일 에러
0 ms0 KiB
#include "split.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; map<ll,char> hash; map<char,ll> mp; ll n1,n2; ll dfs(ll& cr,vector<pair<ll,char>> &v,ll node,vector<vector<ll>>&adj,ll parent){ ll am = 1; for(auto el:adj[node]){ if(el!=parent){ am += dfs(cr,v,el,adj,node); if(cr>=2) return 0; if(am>=v[cr].first){ if(cr==0) n1=el; else n2=el; hash[el]=v[cr].second; return 0; } } } return am; } void dfs2(ll node,vector<vector<ll>>&adj,ll parent,ll cnt,char let,ll target){ if(node==target){ dfs3(node,adj,parent,cnt,let); return; } for(auto el:adj[node]){ if(el!=parent){ dfs2(el,adj,node,cnt,let,target); } } } void dfs3(ll node,vector<vector<ll>>&adj,ll parent,ll &cnt,char let){ if(cnt==0) return; if(hash[node] != let) return; res[node]=mp[let]; cnt--; for(auto el:adj[node]){ if(el!=parent){ dfs3(el,adj,node,cnt,let); } } } vector<int> find_split(int n, int a, int b, int c, vector<int> p, vector<int> q) { ll A=a,B=b,C=c; vector<int> res(n); int m = p.size(); vector<vector<int>> adj(n+2); for(int i=0;i<m;i++){ adj[p[i]].push_back(q[i]); adj[q[i]].push_back(p[i]); } vector<int> vis(n+2); if(m == n-1){ mp['A']=1; mp['B']=c; mp['C']=3; vector<pair<ll,char>> v; v.push_back({A,'A'}); v.push_back({B,'B'}); v.push_back({C,'C'}); sort(v.begin(),v.end()); ll parentNode = 0; ll am = dfs(0,v,parentNode,adj,-1); if(cr<2&&am>=v[cr].first){ mp[parentNode] = v[cr].second; } dfs2(parentNode,adj,-1,v[0].first,v[0].second,n1); dfs2(parentNode,adj,-1,v[1].first,v[1].second,n2); for(ll i=0;i<n;i++){ if(res[i]==0){ res[i]=mp[v[2].second]; } } return res; } bool f1=0; if(B>C){ swap(B,C); f1=1; } stack<int> ds; ds.push(0); vector<int> vis1(n+10); while(!ds.empty()){ int node = ds.top(); ds.pop(); if(vis1[node]) continue; vis1[node]=1; if(B>0){ res[node]=f1 ? 3 : 2; B--; }else if(A>0){ A--; res[node]=1; }else{ C--; res[node]=f1 ? 2 : 3; } for(auto el:adj[node]){ if(!vis1[el]){ ds.push(el); } } } assert(A==0&&B==0&&C==0); return res; }

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

split.cpp: In function 'll dfs(ll&, std::vector<std::pair<long long int, char> >&, ll, std::vector<std::vector<long long int> >&, ll)':
split.cpp:18:14: error: reference to 'hash' is ambiguous
   18 |              hash[el]=v[cr].second;
      |              ^~~~
In file included from /usr/include/c++/10/bits/stl_bvector.h:61,
                 from /usr/include/c++/10/vector:68,
                 from split.h:5,
                 from split.cpp:1:
/usr/include/c++/10/bits/functional_hash.h:58:12: note: candidates are: 'template<class _Tp> struct std::hash'
   58 |     struct hash;
      |            ^~~~
split.cpp:6:14: note:                 'std::map<long long int, char> hash'
    6 | map<ll,char> hash;
      |              ^~~~
split.cpp: In function 'void dfs2(ll, std::vector<std::vector<long long int> >&, ll, ll, char, ll)':
split.cpp:28:9: error: 'dfs3' was not declared in this scope; did you mean 'dfs2'?
   28 |         dfs3(node,adj,parent,cnt,let);
      |         ^~~~
      |         dfs2
split.cpp: In function 'void dfs3(ll, std::vector<std::vector<long long int> >&, ll, ll&, char)':
split.cpp:40:8: error: reference to 'hash' is ambiguous
   40 |     if(hash[node] != let) return;
      |        ^~~~
In file included from /usr/include/c++/10/bits/stl_bvector.h:61,
                 from /usr/include/c++/10/vector:68,
                 from split.h:5,
                 from split.cpp:1:
/usr/include/c++/10/bits/functional_hash.h:58:12: note: candidates are: 'template<class _Tp> struct std::hash'
   58 |     struct hash;
      |            ^~~~
split.cpp:6:14: note:                 'std::map<long long int, char> hash'
    6 | map<ll,char> hash;
      |              ^~~~
split.cpp:41:5: error: 'res' was not declared in this scope
   41 |     res[node]=mp[let];
      |     ^~~
split.cpp: In function 'std::vector<int> find_split(int, int, int, int, std::vector<int>, std::vector<int>)':
split.cpp:69:21: error: cannot bind non-const lvalue reference of type 'll&' {aka 'long long int&'} to an rvalue of type 'll' {aka 'long long int'}
   69 |         ll am = dfs(0,v,parentNode,adj,-1);
      |                     ^
split.cpp:9:12: note: in passing argument 1 of 'll dfs(ll&, std::vector<std::pair<long long int, char> >&, ll, std::vector<std::vector<long long int> >&, ll)'
    9 | ll dfs(ll& cr,vector<pair<ll,char>> &v,ll node,vector<vector<ll>>&adj,ll parent){
      |        ~~~~^~
split.cpp:70:12: error: 'cr' was not declared in this scope; did you mean 'c'?
   70 |         if(cr<2&&am>=v[cr].first){
      |            ^~
      |            c
split.cpp:74:25: error: invalid initialization of reference of type 'std::vector<std::vector<long long int> >&' from expression of type 'std::vector<std::vector<int> >'
   74 |         dfs2(parentNode,adj,-1,v[0].first,v[0].second,n1);
      |                         ^~~
split.cpp:26:38: note: in passing argument 2 of 'void dfs2(ll, std::vector<std::vector<long long int> >&, ll, ll, char, ll)'
   26 | void dfs2(ll node,vector<vector<ll>>&adj,ll parent,ll cnt,char let,ll target){
      |                   ~~~~~~~~~~~~~~~~~~~^~~
split.cpp:75:25: error: invalid initialization of reference of type 'std::vector<std::vector<long long int> >&' from expression of type 'std::vector<std::vector<int> >'
   75 |         dfs2(parentNode,adj,-1,v[1].first,v[1].second,n2);
      |                         ^~~
split.cpp:26:38: note: in passing argument 2 of 'void dfs2(ll, std::vector<std::vector<long long int> >&, ll, ll, char, ll)'
   26 | void dfs2(ll node,vector<vector<ll>>&adj,ll parent,ll cnt,char let,ll target){
      |                   ~~~~~~~~~~~~~~~~~~~^~~