제출 #1024962

#제출 시각아이디문제언어결과실행 시간메모리
1024962Mardonbekhazratov참나무 (IOI23_beechtree)C++17
14 / 100
53 ms24232 KiB
#include "beechtree.h" #include <algorithm> #include <map> using namespace std; int n,m; vector<int>p,c,ans,depth; vector<vector<int>>v; vector<int>subtree; void dfs(int x){ subtree.push_back(x); for(int z:v[x]){ dfs(z); } } bool check(vector<int>s){ map<int,int>m; for(int i=1;i<s.size();i++){ if(s[m[c[s[i]]]]!=p[s[i]]) return false; m[c[s[i]]]++; } return true; } void sub1(){ for(int i=0;i<n;i++){ dfs(i); sort(subtree.begin(),subtree.end()); do{ if(check(subtree)){ ans[i]=1; break; } }while(next_permutation(subtree.begin(),subtree.end())); subtree.clear(); } } void sub2(){ ans[n-1]=ans[n-2]=1; int j=n-2; while(j>0 && c[j]==c[j+1]){ ans[--j]=1; } } void sub3(){ vector<vector<int>>cnt(m+1); int k=0,g=0; for(int i=1;i<n;i++){ if(depth[i]==2) g=i,k++; cnt[c[i]].push_back(i); dfs(i); ans[i]=check(subtree); vector<int>ev; swap(ev,subtree); } for(int i=1;i<=m;i++){ if(i!=c[g] && cnt[c[i]].size()>1) return; } if(k>1 || cnt[c[g]].size()!=2) return; ans[0]=1; // vector<bool>vis(n,false); // subtree.push_back(0); // if(g>0){ // subtree.push_back(p[g]); // if(cnt[c[g]][0]!=p[g]) subtree.push_back(cnt[c[g]][0]); // } // for(int x:subtree) vis[x]=true; } void dfs(int x,int c){ depth[x]=c; for(int z:v[x]){ dfs(z,c+1); } } vector<int> beechtree(int N, int M, std::vector<int> P, std::vector<int> C){ n=N,m=M; swap(p,P); swap(c,C); v.resize(n); bool sui2=true; for(int i=1;i<n;i++){ if(p[i]!=i-1) sui2=false; v[p[i]].push_back(i); } ans.assign(n,0); depth.resize(n); dfs(0,0); if(n<=8) sub1(); else if(sui2) sub2(); else sub3(); return ans; }

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

beechtree.cpp: In function 'bool check(std::vector<int>)':
beechtree.cpp:22:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |     for(int i=1;i<s.size();i++){
      |                 ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...