Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
34316 liuyile 【S】T4 C++ 通过 100 187 MS 19384 KB 1457 2024-11-05 21:08:17

Tests(159/159):


#include<bits/stdc++.h> using namespace std; #define int long long // #define endl "\n" #define pii pair<int,int> #define p1(x) x.first #define p2(x) x.second // #pragma GCC optimize("Ofast") int siz[200300],fa[200300]; vector<int>g[200300]; int d[200300]; inline bool cmp(int x,int y){return siz[x]>siz[y];} inline void dfs(int u){ siz[u]=1; for(int v:g[u]) if(v!=fa[u]) d[v]=d[u]+1,fa[v]=u,dfs(v),siz[u]+=siz[v]; } int n; int res=0; bool del[200300]; inline void cut(int u,int lim){ res++; for(int v:g[u])if(siz[u]>lim&&!del[v]&&v!=fa[u]){ // cout<<u<<" "<<siz[u]<<endl; siz[u]-=siz[v]; cut(v,lim); } } signed main(){ ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); // freopen("genshin.in","r",stdin); // freopen("genshin.out","w",stdout); cin>>n; for(int i=1;i<n;i++){ int u,v; cin>>u>>v; g[u].push_back(v); g[v].push_back(u); } dfs(1); for(int i=1;i<=n;i++) sort(g[i].begin(),g[i].end(),cmp); if((n&1)^(d[n]&1))cout<<-1<<endl; else { int x=n; int ssiz=0; while(x){ del[x]=1; ssiz+=siz[x]; siz[fa[x]]-=ssiz; // cout<<siz[x]<<" "<<(n-d[n])/2+d[x]<<endl; cut(x,(n-d[n])/2+d[x]); x=fa[x]; } cout<<res<<endl; } return 0; }


测评信息: