# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
342912 | urd05 | Village (BOI20_village) | C++14 | 49 ms | 500 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
int dist[10][10];
const int INF=10000;
vector<int> small(10);
vector<int> big(10);
int main(void) {
int n;
scanf("%d",&n);
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
dist[i][j]=INF;
}
dist[i][i]=0;
}
for(int i=1;i<n;i++) {
int u,v;
scanf("%d %d",&u,&v);
u--;
v--;
dist[u][v]=1;
dist[v][u]=1;
}
for(int k=0;k<n;k++) {
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j]);
}
}
}
vector<int> v;
for(int i=0;i<n;i++) {
v.push_back(i);
}
int val=1;
for(int i=1;i<=n;i++) {
val*=i;
}
int mini=INF;
int maxi=-INF;
for(int i=0;i<val;i++) {
int sum=0;
next_permutation(v.begin(),v.end());
bool flag=true;
for(int j=0;j<n;j++) {
if (v[j]==j) {
flag=false;
break;
}
sum+=dist[j][v[j]];
}
if (!flag) {
continue;
}
if (sum<mini) {
mini=sum;
for(int j=0;j<n;j++) {
small[j]=v[j];
}
}
if (sum>maxi) {
maxi=sum;
for(int j=0;j<n;j++) {
big[j]=v[j];
}
}
}
printf("%d %d\n",mini,maxi);
for(int i=0;i<n;i++) {
printf("%d ",small[i]+1);
}
printf("\n");
for(int i=0;i<n;i++) {
printf("%d ",big[i]+1);
}
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |