树的存储和遍历!
  • 板块灌水区
  • 楼主noip毒瘤
  • 当前回复218
  • 已保存回复219
  • 发布时间2024/7/28 16:06
  • 上次更新2024/7/28 21:48:24
查看原帖
树的存储和遍历!
3296
noip毒瘤楼主2024/7/28 16:06

B3681 子树和

#include <bits/stdc++.h>

using namespace std;

vector < int > a[1005];
bool vis[1005];
int size[1005];

void dfs( int x )
{
	vis[x] = 1;
	size[x] = 1;
	for( int i = 0 ; i < a[x].size() ; i++ )
	{
		if( vis[ a[x][i] ] == 0 )
		{
			dfs( a[x][i] );
			size[x] += size[ a[x][i] ];
		}
	}
}

int main()
{
	int n;
	cin >> n;
	for( int i = 2 ; i <= n ; i++ )
	{
		int u;
		cin >> u;
		a[i].push_back( u );
		a[u].push_back( i );
	}
	dfs( 1 );
	for( int i = 1 ; i <= n ; i++ )
	{
		cout << size[i] << endl;
	}
	return 0;
}

P5908 猫猫和企鹅

#include <bits/stdc++.h>

using namespace std;

vector < int > edge[100005];
bool vis[100005];
int dep[100005];

void dfs( int x )
{
	vis[x] = 1;
	for( int i = 0 ; i < edge[x].size() ; i++ )
	{
		int y = edge[x][i];
		if( vis[y] == 0 )
		{
			dep[y] = dep[x] + 1;
			dfs( y );
		}
	}
}

int main()
{
	int n , d , ans = 0;
	cin >> n >> d;
	for( int i = 1 ; i < n ; i++ )
	{
		int u , v;
		cin >> u >> v;
		edge[u].push_back( v );
		edge[v].push_back( u );
	}
	dfs( 1 );
	for( int i = 2 ; i <= n ; i++ )
	{
		if( dep[i] <= d )
			ans++;
	}
	cout << ans;
	return 0;
}
2024/7/28 16:06
加载中...