Submission #1313543

#TimeUsernameProblemLanguageResultExecution timeMemory
1313543cleimekVillage (BOI20_village)C++20
12 / 100
1095 ms568 KiB
#include <bits/stdc++.h> using namespace std; const int INF = 1e8; vector<vector<int>> graph; void DFS(int v, int prev, vector<int>& dist){ dist[v]=dist[prev]+1; for(auto u : graph[v]){ if(u == prev) continue; DFS(u,v,dist); } } bool Check(vector<int>& arr){ for(int i=0; i<arr.size(); ++i){ if(arr[i]==i+1) return false; } return true; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; graph.resize(n+1); for(int i=1; i<n; ++i){ int nodeA, nodeB; cin >> nodeA >> nodeB; graph[nodeA].push_back(nodeB); graph[nodeB].push_back(nodeA); } vector<vector<int>> dist(n+1,vector<int>(n+1,-1)); for(int i=1; i<=n; ++i){ DFS(i,0,dist[i]); } vector<int> perm; for(int i=1; i<=n; ++i) perm.push_back(i); int ansMin=INF; int ansMax=-INF; vector<int> minOrder(n,1); vector<int> maxOrder(n,1); do{ //check if(!Check(perm)) continue; int res=0; for(int i=0; i<n; ++i){ res += dist[i+1][perm[i]]; } if(ansMin > res){ ansMin=res; minOrder=perm; } if(ansMax < res){ ansMax=res; maxOrder=perm; } }while(next_permutation(perm.begin(), perm.end())); cout << ansMin << " " << ansMax << "\n"; for(auto a : minOrder) cout << a << " "; cout << "\n"; for(auto a : maxOrder) cout << a << " "; cout << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...