求助
查看原帖
求助
989997
DGL__DGL_AFO楼主2024/8/31 10:24

为啥建单向边可过,建双向边就wa了捏(用st[]判断不能回搜了)

#include<bits/stdc++.h>
using namespace std;
int n,m;
int h[514],e[1145],ne[1145],idx;
int st[514];
int f[1145][1145];

inline void add(int a,int b)
{
	idx++;
	ne[idx]=h[a];
	e[idx]=b;
	h[a]=idx;
}

inline void dfs(int x)
{
	st[x]=x;
	 
	for(int i=h[x];i;i=ne[i])
	{
		int y=e[i];
		if(!st[y])
		{
			dfs(y);
		  for(int j=m+1;j>=1;j--)
		    for(int k=0;k<j;k++)
		      f[x][j]=max(f[x][j],f[y][k]+f[x][j-k]);
		}
		
	}
}

int main()
{
	cin>>n>>m;
	f[0][1]=0;
	for(int i=1;i<=n;i++)
	{
		int b;
		cin>>b>>f[i][1];
		
		//add(i,b);
		add(b,i);  
	}
	
	dfs(0);
	/*for(int i=1;i<=n;i++)
	  cout<<f[i][1]<<' ';*/
	/*for(int i=0;i<=n;i++)
	{
		for(int j=1;j<=m+1;j++)
	    cout<<f[i][j]<<' ';
	  cout<<endl;  
	}*/
	  
	cout<<f[0][m+1];
	return 0;
}
2024/8/31 10:24
加载中...