不是,怎么就编译错误了?
查看原帖
不是,怎么就编译错误了?
1094797
Myl100313楼主2024/12/6 22:52

请诸位观察代码。

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int tot,to[N*2],next[N*2],front[N],b[N*2];
int v[N],root,tmp,node,n;
long long f[N][2],w[N];
long long ans,k;
void add(int u,int v,int t)
{
	to[++tot]=v,next[tot]=front[u],front[u]=tot,b[tot]=t;
	to[++tot]=u,next[tot]=front[v],front[v]=tot,b[tot]=t;
}
void dfs(int x,int fa)
{
	v[x]=1;
	for(int i=front[x];i;i=next[i])
	{
		int t=to[i];
		if(t==fa) continue;
		if(v[t])
		{
			root=t;
			node=x;
			tmp=b[i];
		}
		else dfs(t,x);
	}
}
void dp(int x,int fa)
{
	f[x][0]=0,f[x][1]=w[x];
	for(int i=front[x];i;i=next[i])
	{
		int t=to[i];
		if(b[i]==tmp||t==fa) continue;
		dp(t,x);
		f[x][0]+=max(f[t][0],f[t][1]);
		f[x][1]+=f[t][0];
	}
}
int main()
{
    scanf("%d",&n);
    int x;
    for(int i=1;i<=n;i++)
    {
    	cin>>w[i]>>x;
    	add(i,x,i);
	}
	for(int i=1;i<=n;i++)
	{
		if(!v[i])
		{
			dfs(i,0);
			dp(root,0);
			k=f[root][0];
			dp(node,0);
			k=max(k,f[node][0]);
			ans+=k;
		}
	}
	cout<<ans<<endl;
	return 0;
}

样例可以过,dev-cpp编译器编译无异常,提交时语言为C++14(GCC9)。编译错误。有人解释原因否?

2024/12/6 22:52
加载中...