请诸位观察代码。
#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)。编译错误。有人解释原因否?