WA求调
查看原帖
WA求调
816821
Liyunze123楼主2024/12/24 19:55
#include<bits/stdc++.h>
using namespace std;
int n,a,b,e[600010],ne[600010],h[300010],d[300010],tr[300010],st[300010],idx,ans=1;
vector<int>g;
void add(int a,int b){e[idx]=b,ne[idx]=h[a],h[a]=idx++;}
void tadd(int a,int b){for(int w=a;w<=n;w+=(w&(-w)))tr[w]+=b;}
int sum(int i){
	int ans=0;
	for(int w=i;w;w-=(w&(-w)))ans+=tr[w];
	return ans;
}
int main(){
	scanf("%d",&n),memset(h,-1,sizeof(h));
	for(int w=1;w<n;w++)scanf("%d%d",&a,&b),d[a]++,d[b]++,add(a,b),add(b,a);
	for(int w=1;w<=n;w++){
		int k=0;
		for(int x=h[w];~x;x=ne[x]){
			int p=d[e[x]]-1;
			if(!st[p])g.push_back(p);
			if(p)tadd(p,1);
			st[p]=1,k++;
		}
		ans=max(ans,k+1);
		for(int x=0;x<g.size();x++)if(g[x])ans=max(ans,(sum(n)-sum(g[x]-1))*(g[x]+1)+1);
		for(int x=0;x<g.size();x++){
			if(g[x])tadd(g[x],-1);
			st[g[x]]=0;
		}
		g.clear();
	}
	printf("%d",n-ans);
	return 0;
}
/*
出现次数*(度数+1)+1 
*/

AC12个,WA17个

2024/12/24 19:55
加载中...