Submission #1174660

#TimeUsernameProblemLanguageResultExecution timeMemory
1174660guagua0407Balanced Tree (info1cup18_balancedtree)C++20
0 / 100
4094 ms4172 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 D=0; int mn=n+1; int cc; function<void(int,int)> dfs=[&](int v,int p){ d[v]=d[p]+1; if(d[v]!=1 and c[v]==cc){ mn=min(mn,d[v]-1); return; } for(auto u:adj[v]){ if(u==p) continue; dfs(u,v); } }; for(int i=1;i<=n;i++){ cc=c[i]; mn=n+1; dfs(i,0); D=max(D,mn); } mnn=min(mnn,{D,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

Compilation message (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...