Submission #1130614

#TimeUsernameProblemLanguageResultExecution timeMemory
1130614rayan_bdVillage (BOI20_village)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;

typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pbds; 


#define getar(ar,n) for(ll i=0;i<n;++i) cin>>ar[i]
#define show(n) cout<<n<<'\n'
#define all(v) v.begin(), v.end()
#define br cout<<"\n"
#define pb push_back
#define nl '\n'
#define yes cout<<"YES\n"
#define no cout<<"NO\n"
#define ret return
#define ll long long
#define ld long double
#define sza(x) ((int)x.size())
#define fi first
#define se second

const int mxN = 1e5+100;
const ll MOD = 1e9 + 7;
const ll INF = 1e9;
const ld EPS = 1e-9;

vector<ll> adj[mxN],new_adj[mxN];
bool changed1[mxN],changed2[mxN];
ll ans1=0,ans2=0,pos1[mxN],pos2[mxN];
/*ll dist[mxN][mxN],seen[mxN];
vector<pair<ll,pair<ll,ll>>> vec;
*/
void dfs(ll u=1,ll par=-1){
	ll cnt=0;
	for(auto it:new_adj[u]){
		if(it!=par){
			dfs(it,u);
			if(!changed1[it]) ++cnt;
		}
		
	}
	ans1+=cnt*2;
	if(cnt>0){
		if(par!=-1){
			 adj[u].erase(find(all(adj[u]),par));
			 adj[par].erase(find(all(adj[par]),u));
		}
		pos1[adj[u][0]]=u;
		pos1[u]=adj[u].back();
		changed1[u]=1;
		for(ll i=1;i<adj[u].size();++i){
			pos1[adj[u][i]]=adj[u][i-1];
		}
	}
	if(u==1&&cnt==0){
		ans1+=2;
		pos1[u]=1;
		swap(pos1[u],pos1[new_adj[u][0]]);
	}
}

void dfs2(ll u,ll v,ll par,ll d){
	if(par!=-1) dist[u][v]=d;
	if(par!=-1) vec.pb({d,{u,v}});
	for(auto it:new_adj[v]){
		if(it!=par){
			dfs2(u,it,v,d+1);
		}
	}
}

void lets_go() {
    ll n,u,v;cin>>n;
	for(ll i=0;i<n-1;++i){
		cin>>u>>v;
		adj[u].pb(v);
		adj[v].pb(u);
		new_adj[u].pb(v);
		new_adj[v].pb(u);
	}    
	dfs();
/*	for(ll i=1;i<=n;++i) dfs2(i,i,-1,0);
	sort(all(vec),greater<pair<ll,pair<ll,ll>>>());
	for(auto it:vec){
		u=it.se.fi,v=it.se.se;
		if(!seen[u]&&!seen[v]){
			ans2+=it.fi*2,seen[u]=1,seen[v]=1,pos2[u]=v,pos2[v]=u;
			//cout<<u<<" "<<v<<" "<<it.fi<<nl;
		}
	}
	for(ll i=1;i<=n;++i){
		if(!seen[i]){
			pos2[i]=i;
			swap(pos2[i],pos2[new_adj[i][0]]);
		}
	}*/
	cout<<ans1<<" "<<1<<nl;
	for(ll i=1;i<=n;++i) cout<<pos1[i]<<" ";
	br;
	for(ll i=1;i<=n;++i) cout<<1<<" ";
	br;
}

int main() {
    
    #ifndef ONLINE_JUDGE
    freopen("input.in","r",stdin);
    freopen("output.out","w",stdout);
    #endif

    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    
    lets_go();

    return 0;
}

Compilation message (stderr)

Village.cpp: In function 'void dfs2(long long int, long long int, long long int, long long int)':
Village.cpp:66:21: error: 'dist' was not declared in this scope
   66 |         if(par!=-1) dist[u][v]=d;
      |                     ^~~~
Village.cpp:67:21: error: 'vec' was not declared in this scope
   67 |         if(par!=-1) vec.pb({d,{u,v}});
      |                     ^~~
Village.cpp: In function 'int main()':
Village.cpp:110:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  110 |     freopen("input.in","r",stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
Village.cpp:111:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  111 |     freopen("output.out","w",stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~