关于空间
  • 板块灌水区
  • 楼主Dangerou
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/10/19 14:26
  • 上次更新2023/11/4 03:18:04
查看原帖
关于空间
233501
Dangerou楼主2021/10/19 14:26

为什么空间超限了 QwQQwQ ,我不理解

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<map>
#include<vector>
#include<string>
#include<cstring>
#include<queue>
#include<stack>
using namespace std;
int n,u,ww;
int depest[10001];
int head[10001],tot;
struct node
{
	int to;
	int nex;
	int dis;
}tree[10001];
int f[10001][3];
inline void add(int xx,int yy,int ww)
{
	tree[++tot]=(node){yy,head[xx],ww};
	head[xx]=tot;
	return;
}
inline void dp_down(int k,int fa)
{
	int res1=0,res2=0,to,w;
	for(int i=head[k];i;i=tree[i].nex)
	{
		to=tree[i].to,w=tree[i].dis;
		if(to==fa) continue;
		dp_down(to,k);
		if(res1<f[to][0]+w) res2=res1,res1=f[to][0]+w,depest[k]=to;
		else if(res2<f[to][0]+w) res2=f[to][0]+w;
	}
	f[k][0]=res1;f[k][1]=res2;
	return;
}
inline void dp_up(int k,int fa)
{
	int to,w;
	for(int i=head[k];i;i=tree[i].nex)
	{
		to=tree[i].to,w=tree[i].dis;
		if(to==fa) continue;
		if(depest[k]==to) f[to][2]=max(f[k][1]+w,f[k][2]+w);
		else f[to][2]=max(f[k][0]+w,f[k][2]+w);
		dp_up(to,k);
	}
	return;
}
int main()
{
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	while(scanf("%d",&n)!=EOF)
	{
		tot=0;
		memset(head, 0, sizeof(head));
		memset(depest, 0, sizeof(depest));
		memset(f, 0, sizeof(f));
		for(int i=2;i<=n;i++) scanf("%d%d",&u,&ww),add(u,i,ww),add(i,u,ww);
		dp_down(1,0);
		dp_up(1,0);
		for(int i=1;i<=n;i++) printf("%d\n",max(f[i][0],f[i][2]));
	}
	//fclose(stdin);
	//fclose(stdout);
	return 0;
}
2021/10/19 14:26
加载中...