各位大佬帮忙改一下吧!
查看原帖
各位大佬帮忙改一下吧!
777764
违规用户名777764楼主2024/7/13 15:46

P4201代码求调

#pragma GCC octimize("02")
#include <iostream>
#include <vector> 
using namespace std;

int n, m, q;
vector<int> e[100010];
int f[100010][3], g[100010][3][20];

void dfs(int x, int fa)
{
	for (auto y : e[x])
	{
		if (fa == y) continue;
		dfs(y, x);
		f[x][2] = min(max(f[x][2], f[y][2] + 1), max(f[x][1], f[x][1]));
		f[x][1] = min(max(f[x][1], f[y][2] + 1), max(f[x][0], f[y][1]));
		f[x][0] = max(f[x][0], f[y][2] + 1);
	}
}

void dfs2(int x, int fa)
{
	for (int i = 1; i <= f[1][2]; ++i)
		for (int j = 0; j < 3; ++j) g[x][j][i + 1] = 1;
	for (auto y : e[x])
	{
		if (fa == y) continue;
		dfs2(y, x);
		for (int i = 1; i <= f[1][2]; ++i)
		{
			g[x][2][i] = g[x][2][i] * g[y][2][i - 1] + g[x][1][i] * g[y][1][i];
			g[x][1][i] = g[x][1][i] * g[x][2][i - 1] + g[x][0][i] * g[y][1][i];
			g[x][0][i] = g[x][0][i] * g[y][2][i - 1];
		}
	}
}

int main()
{
	cin >> n >> m >> q;
	for (int i = 1; i <= m; ++i)
	{
		int u, v;
		cin >> u >> v;
		e[u].push_back(v);
	}
	dfs(1, 0);
	cout << f[1][2] << ' ' << g[1][2][f[1][2]] <<  endl;
	return 0;	
 } 
2024/7/13 15:46
加载中...