求帮忙压内存
  • 板块灌水区
  • 楼主N2MENT
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/11/21 09:58
  • 上次更新2023/11/3 23:52:39
查看原帖
求帮忙压内存
401583
N2MENT楼主2021/11/21 09:58

rt

#include<bits/stdc++.h>
using namespace std;
int n;
int hd[10001],cnt;
struct EDGE {
	int nxt,v;
} e[10001];
void AE(int u,int v) {
	e[++cnt].v=v;
	e[cnt].nxt=hd[u];
	hd[u]=cnt;
}
long int f[10001][3];
void dfs(int u,int fa) {
	f[u][0]=1,f[u][1]=0,f[u][2]=0x3f3f3f3f;
	for(int j=hd[u]; j; j=e[j].nxt) {
		if(fa==e[j].v)continue;
		dfs(e[j].v,u);
		f[u][0]+=min(f[e[j].v][0],f[e[j].v][1]);
		f[u][1]+=f[e[j].v][2];
	}
	for(int j=hd[u]; j; j=e[j].nxt) {
		if(fa==e[j].v)continue;
		f[u][2]=min(f[u][2],f[u][1]+f[e[j].v][0]-f[e[j].v][2]);
	}

}
int main() {
	while(1) {
		scanf("%d",&n);
		if(n==-1)exit(0);
		memset(hd,0,sizeof(hd));
		cnt=0;
		for(int i=1; i<n; i++) {
			int u,v;
			scanf("%d%d",&u,&v);
			AE(u,v);
			AE(v,u);
		}
		dfs(n,0);
		printf("%ld\n",min(f[n][0],f[n][2]));
	}
}
2021/11/21 09:58
加载中...