n方被卡常求助
查看原帖
n方被卡常求助
802681
wangziyue_AK楼主2024/12/31 13:37

AC30个,TLE9个。模拟赛时改假做法h+,卡常0.5h+。

#include<bits/stdc++.h>
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
#define fi first
#define se second
typedef double db;
#define pb push_back
#define eb emplace_back
#define bcnt __builtin_popcount
#define TS printf("!!!tiaoshi\n")
const int inf=15678;
const int N=10055;
int n,m,a,b,c,sz[N],nsz[N];
vector<int> g[N];
short f[2][N][N],dp[2][N][N];
#define cmx(x,y) x=max(0+x,(y))
void dfs1(int u){
	nsz[u]=1;
	for(int v:g[u]){
		dfs1(v);
		nsz[u]+=nsz[v];
	}
}
void dfs(int u){
	for(int i=0;i<=min(nsz[u],b)+1;i++) f[0][u][i]=f[1][u][i]=-inf;
	for(int i=0;i<=min(nsz[u],b)+1;i++) dp[0][u][i]=dp[1][u][i]=-inf;
	f[0][u][0]=0,f[1][u][1]=0;
	dp[0][u][0]=0,dp[1][u][1]=1;
	if(!g[u].size()) f[1][u][1]=1,dp[1][u][1]=0;
	sz[u]=1;
	for(int v:g[u]){
		dfs(v);
		sz[u]+=sz[v];
		for(int i=min(sz[u],b+1);i>=0;i--){
			for(int j=min(sz[v],i);j>=0;j--){
				cmx(f[0][u][i],f[0][u][i-j]+max(f[0][v][j],f[1][v][j]));
				cmx(f[1][u][i],f[1][u][i-j]+f[0][v][j]);
				cmx(dp[0][u][i],dp[0][u][i-j]+max(dp[0][v][j],dp[1][v][j]));
				cmx(dp[1][u][i],dp[1][u][i-j]+dp[0][v][j]);
			}
		}
	}
}
void sol(){
	scanf("%d%d%d%d",&n,&a,&b,&c);
	int fa;
	for(int i=2;i<=n;i++){
		scanf("%d",&fa);
		g[fa].eb(i);
	}
	if(c&1){
		for(int i=1;i<=n;i++) g[i].clear();
		puts("No");return;
	}c>>=1;
	dfs1(1),dfs(1);
	bool bj=0;
//	printf("sum sz:%d\n",sz[1]);
//	printf("f:%d %d\n",f[1][1][b+1],f[0][1][b]);
//	printf("dp:%d %d\n",dp[1][1][b+1],dp[0][1][b]);
	if(b+1>=c&&f[1][1][b+1]>=b+1-c&&dp[1][1][b+1]>=c) bj=1;
	else if(b>=c&&f[0][1][b]>=b-c&&dp[0][1][b]>=c) bj=1;
	if(bj) puts("Yes");
	else puts("No");
	for(int i=1;i<=n;i++) g[i].clear();
}
int main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	int T=1;
	scanf("%d",&T);
	while(T--) sol();

	return 0;
}

2024/12/31 13:37
加载中...