제출 #1021563

#제출 시각아이디문제언어결과실행 시간메모리
1021563vjudge1Split the Attractions (IOI19_split)C++17
0 / 100
619 ms1048576 KiB
#include "split.h" #include<bits/stdc++.h> using namespace std; using lli=long long int; #define pb push_back #define deb(x) cout<<#x<<": "<<x<<endl; vector<int> ans; vector<bool> visited; vector<vector<int>> sons; vector<int> sz; void dfs2(int x, int p, vector<vector<int>> &adj){ sz[x]++; for(int y: adj[x]){ if(y==p) continue; sons[x].pb(y); dfs2(y,x,adj); sz[x]+=sz[y]; } } void dfs3(int x, int &a, int &b, int s, bool ya, bool whch){ if(ya){ if(whch){ if(b>0){ ans[x]=2; b--; for(int y: sons[x]){ dfs3(y,a,b,s,ya,whch); } } } else{ if(a>0){ ans[x]=1; a--; for(int y: sons[x]){ dfs3(y,a,b,s,ya,whch); } } } } else{ if(x==s){ dfs3(x,a,b,s,1,whch); return; } if(whch){ if(a>0){ ans[x]=1; a--; for(int y:sons[x]){ dfs3(y,a,b,s,ya,whch); } } } else{ if(b>0){ ans[x]=2; b--; for(int y:sons[x]){ dfs3(y,a,b,s,ya,whch); } } } } } vector<int> find_split(int n, int a1, int b1, int c1, vector<int> p, vector<int> q) { vector<pair<int,int>> ayuda; ayuda.pb({a1,1}); ayuda.pb({b1,2}); ayuda.pb({c1,3}); sort(ayuda.begin(), ayuda.end()); int a=ayuda[0].first; int b=ayuda[1].first; int c=ayuda[2].first; ans.clear(); sons.clear(); sz.clear(); // visited.clear(); ans.resize(n,0); // visited.resize(n,0); //visited[0]=true; sons.resize(n); sz.resize(n,0); vector<vector<int>> adj(n); for(int i=0; i<p.size(); ++i){ adj[p[i]].pb(q[i]); adj[q[i]].pb(p[i]); } dfs2(0,-1,adj); lli si0=-1; lli si1=-1; for(lli i=0; i<n; ++i){ // deb(sz[i]); if(sz[i]>=a && n-sz[i]>=b) si0=i; if(sz[i]>=b && n-sz[i]>=a) si1=i; } // deb(si0); // deb(si1); // si0=-1; if(si0!=-1){ dfs3(0,a,b,si0,0,0); for(int i=0; i<n; ++i){ ans[i]=ayuda[(ans[i]+2)%3].second; } return ans; } if(si1!=-1){ dfs3(0,a,b,si1,0,1); for(int i=0; i<n; ++i){ ans[i]=ayuda[(ans[i]+2)%3].second; } return ans; } return ans; }

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

split.cpp: In function 'std::vector<int> find_split(int, int, int, int, std::vector<int>, std::vector<int>)':
split.cpp:102:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  102 |   for(int i=0; i<p.size(); ++i){
      |                ~^~~~~~~~~
split.cpp:90:7: warning: unused variable 'c' [-Wunused-variable]
   90 |   int c=ayuda[2].first;
      |       ^
#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...