淀粉质是什么能吃吗
  • 板块灌水区
  • 楼主LonelyPatient
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/8/1 16:45
  • 上次更新2024/8/1 17:21:06
查看原帖
淀粉质是什么能吃吗
1158060
LonelyPatient楼主2024/8/1 16:45

P3806 点分治1 求条

WA #1

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e6 + 10;
ll n, m; 
vector <ll> v[N];
vector <ll> w[N];
ll q[N], t[N];
ll maxn[N], sum, rt;
ll siz[N], rem[N], dis[N];
bool vis[N], test[N], judge[N];
void get_rt (ll u, ll fa) {
	siz[u] = 1, maxn[u] = 0;
	ll sz = v[u].size ();
	for (int i = 0; i < sz; ++ i) {
		ll y = v[u][i];
		if (y == fa || vis[y]) {
			continue;
		}
		get_rt (y, u);
		siz[u] += siz[y];
		maxn[u] = max (maxn[u], siz[y]);
	}
	maxn[u] = max (maxn[u], sum - siz[u]);
	if (maxn[u] < maxn[rt]) {
		rt = u;
	}
}
void get_dis (ll u, ll fa) {
	rem[++rem[0]] = dis[u];
	ll sz = v[u].size ();
	for (int i = 0; i < sz; ++ i) {
		ll y= v[u][i];
		if (y == fa || vis[y]) {
			continue;
		}
		dis[y] = dis[u] + w[u][i];
		get_dis (y, u); 
	}
}
void dfs1 (ll u) {
	ll len = 0;
	ll sz = v[u].size ();
	for (int i = 0; i < sz; ++ i) {
		ll y = v[u][i];
		if (vis[y]) {
			continue;
		}
		rem[0] = 0;
		dis[y] = w[u][i];
		get_dis (y, u);
		for (int j = rem[0]; j > 0; -- j) {
			for (int k = 1; k <= m; ++ k) {
				if (q[k] >= rem[j]) {
					test[k] |= judge[q[k] - rem[j]];
				}
			}
		}
		for (int j = rem[0]; j > 0; -- j) {
			t[++ len] = rem[j];
			judge [rem[j]] = 1; 
		}
	}
	for (int i = 1; i <= len; ++ i) {
		judge [t[i]] = 0;
	}
}
void dfs2 (ll u) {
	judge[0] = vis[u] = 1;
	dfs1 (u);
	ll sz = v[u].size ();
	for (int i = 0; i < sz; ++ i) {
		ll y = v[u][i];
		if (vis[y]) {
			continue;
		}
		sum = siz[y];
		maxn[rt] = 1e8;
		rt = 0;
		get_rt (y, u);
		dfs2 (rt);
	}
}
int main () {
	cin >> n >> m;
	for (int i = 1; i < n; ++ i) {
		ll x, y, z;
		cin >> x >> y >> z;
		v[x].push_back (y);
		v[y].push_back (x);
		w[x].push_back (z);
		w[y].push_back (z);
	}
	for (int i = 1; i <= m; ++ i) {
		cin >> q[i];
	}
	maxn[0] = sum = n;
	get_rt (1, 0);
	dfs2 (rt);
	for (int i = 1; i <= m; ++ i) {
		cout << (test[i] ? "AYE\n" : "NAY\n");
	}
	return 0;
}
2024/8/1 16:45
加载中...