제출 #1174658

#제출 시각아이디문제언어결과실행 시간메모리
1174658guagua0407Balanced Tree (info1cup18_balancedtree)C++20
0 / 100
4094 ms4168 KiB
#pragma GCC optimize("O3") #include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<int,int> #define f first #define s second #define all(x) x.begin(),x.end() #define _ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; void setIO(string s) { freopen((s + ".in").c_str(), "r", stdin); freopen((s + ".out").c_str(), "w", stdout); } const int inf=1e9; void solve(){ int n; cin>>n; vector<vector<int>> adj(n+1); for(int i=0;i<n-1;i++){ int a,b; cin>>a>>b; adj[a].push_back(b); adj[b].push_back(a); } vector<int> C(n+1); for(int i=1;i<=n;i++){ cin>>C[i]; } pair<int,vector<int>> mnn; vector<int> d(n+1); mnn.f=inf; for(int S=0;S<(1<<n);S++){ vector<int> c(n+1); for(int i=0;i<n;i++){ if(C[i+1]!=-1) c[i+1]=C[i+1]; else if(S&(1<<i)) c[i+1]=1; else c[i+1]=0; } int l=0,r=n+1; while(l<r){ int D=(l+r)/2; bool tf=false; int cc; function<void(int,int)> dfs=[&](int v,int p){ if(tf) return; d[v]=d[p]+1; if(d[v]!=1 and c[v]==cc and d[v]-1<=D){ tf=true; return; } for(auto u:adj[v]){ if(u==p) continue; dfs(u,v); } }; bool ok=true; for(int i=1;i<=n;i++){ tf=false; cc=c[i]; dfs(i,0); if(!tf){ ok=false; break; } } if(ok){ r=D; } else{ l=D+1; } } mnn=min(mnn,{l,c}); } if(mnn.f==n+1){ cout<<-1<<'\n'; } else{ cout<<mnn.f<<'\n'; for(int i=1;i<=n;i++){ cout<<mnn.s[i]<<' '; } cout<<'\n'; } } int main() {_ int t; cin>>t; while(t--){ solve(); } return 0; } //maybe its multiset not set //yeeorz //diaoborz

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

balancedtree.cpp: In function 'void setIO(std::string)':
balancedtree.cpp:15:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   15 |     freopen((s + ".in").c_str(), "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
balancedtree.cpp:16:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   16 |     freopen((s + ".out").c_str(), "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...