QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#286598 | #7961. 一棵树 | ucup-team1004 | WA | 359ms | 53864kb | C++14 | 1.8kb | 2023-12-18 07:34:26 | 2023-12-18 07:34:27 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
#ifdef DEBUG
template<class T>
ostream& operator << (ostream &out,vector<T> a){
out<<'[';
for(T x:a)out<<x<<',';
return out<<']';
}
ostream& operator << (ostream &out,pair<ll,int> a){
return out<<'('<<a.first<<','<<a.second<<')';
}
template<class T>
vector<T> ary(T *a,int l,int r){
return vector<T>{a+l,a+1+r};
}
template<class T>
void debug(T x){
cerr<<x<<endl;
}
template<class T,class...S>
void debug(T x,S...y){
cerr<<x<<' ',debug(y...);
}
#else
#define debug(...) void()
#endif
const int N=5e5+10;
const ll INF=1e12;
int n,k;
vector<int>to[N];
ll ans=INF;
int m,rt,siz[N],mx[N],vis[N];
void dfs1(int u,int fa=0){
m++;
for(int v:to[u])if(v^fa&&!vis[v])dfs1(v,u);
}
void dfs2(int u,int fa=0){
siz[u]=1,mx[u]=0;
for(int v:to[u])if(v^fa&&!vis[v]){
dfs2(v,u);
siz[u]+=siz[v];
mx[u]=max(mx[u],siz[v]);
}
mx[u]=max(mx[u],m-siz[u]);
if(mx[u]<mx[rt])rt=u;
}
int dep[N],cnt[N],cur[N],top[N];
void dfs3(int u,int t=0,int fa=0){
dep[u]=fa?dep[fa]+1:0,top[u]=t;
for(int v:to[u])if(v^fa){
dfs3(v,t?t:v,u);
}
}
void solve(int u){
m=rt=0,dfs1(u),dfs2(u),vis[u=rt]=1,dfs3(u);
for(int i=1;i<=n;i++)cnt[dep[i]]++;
for(int i=1;i<=n;i++)cnt[i]+=cnt[i-1];
for(int i=1;i<=n;i++)cur[cnt[dep[i]]--]=i;
fill(cnt,cnt+1+n,0);
int nex=0,now=0;
ll sum=(n-1ll)*k;
for(int x=n;x>=1&&now<k;x--){
int i=cur[x];
if(i==u){now++;continue;}
if(++cnt[top[i]]*2>k)nex=top[i];
else now++,sum-=2*dep[i];
}
// debug(u,now,ary(cnt,1,n));
if(now==k)ans=min(ans,sum);
fill(cnt,cnt+1+n,0);
if(nex&&!vis[nex])solve(nex);
}
int main(){
scanf("%d%d",&n,&k);
for(int i=1,u,v;i<n;i++){
scanf("%d%d",&u,&v);
to[u].push_back(v),to[v].push_back(u);
}
mx[0]=n+1;
solve(1);
cout<<ans<<endl;
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 346ms
memory: 43372kb
input:
499991 31473 1 2 2 3 1 4 2 5 4 6 4 7 6 8 4 9 8 10 6 11 9 12 10 13 10 14 1 15 14 16 3 17 14 18 12 19 13 20 11 21 16 22 16 23 20 24 5 25 16 26 18 27 8 28 15 29 27 30 27 31 26 32 21 33 3 34 27 35 33 36 25 37 22 38 11 39 11 40 17 41 25 42 3 43 3 44 2 45 35 46 25 47 5 48 6 49 41 50 42 51 1 52 39 53 14 54...
output:
15734930984
result:
ok single line: '15734930984'
Test #2:
score: 0
Accepted
time: 347ms
memory: 53864kb
input:
499993 461706 1 2 2 3 3 4 1 5 3 6 3 7 7 8 5 9 5 10 7 11 10 12 9 13 13 14 12 15 13 16 15 17 14 18 17 19 16 20 15 21 16 22 17 23 22 24 20 25 23 26 25 27 27 28 28 29 25 30 29 31 30 32 31 33 33 34 33 35 32 36 36 37 35 38 33 39 34 40 35 41 41 42 40 43 42 44 39 45 40 46 41 47 43 48 44 49 46 50 49 51 50 52...
output:
195357165512
result:
ok single line: '195357165512'
Test #3:
score: 0
Accepted
time: 352ms
memory: 53824kb
input:
499993 170472 1 2 1 3 1 4 4 5 5 6 4 7 6 8 5 9 8 10 6 11 6 12 10 13 13 14 11 15 14 16 15 17 14 18 16 19 16 20 17 21 17 22 20 23 19 24 21 25 23 26 22 27 27 28 24 29 24 30 28 31 31 32 30 33 29 34 29 35 35 36 33 37 34 38 36 39 36 40 36 41 41 42 40 43 41 44 39 45 45 46 42 47 47 48 44 49 45 50 46 51 50 52...
output:
65062419628
result:
ok single line: '65062419628'
Test #4:
score: -100
Wrong Answer
time: 359ms
memory: 53748kb
input:
499994 801 1 2 2 3 1 4 2 5 2 6 1 7 7 8 4 9 6 10 10 11 7 12 7 13 10 14 13 15 15 16 14 17 16 18 18 19 15 20 17 21 18 22 19 23 21 24 23 25 21 26 26 27 27 28 24 29 28 30 29 31 27 32 30 33 28 34 29 35 35 36 31 37 36 38 36 39 38 40 36 41 36 42 38 43 38 44 42 45 41 46 41 47 47 48 46 49 45 50 49 51 49 52 48...
output:
285905395
result:
wrong answer 1st lines differ - expected: '285905307', found: '285905395'