社区讨论

造福后人

CF2106G2 Baudelaire (hard version)参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhjsb7ay
此快照首次捕获于
2025/11/04 07:41
4 个月前
此快照最后确认于
2025/11/04 07:41
4 个月前
查看原帖
萌新手写的一个本题函数式交互库,调试可以用一下。
CPP

namespace Interactive{
	#define maxn 370001
	int n,rt,a[maxn],s[maxn],fa[maxn];
	vector<int>e[maxn],t[maxn],vec;
	void dfs(int x,int lst){
		vec.push_back(x);
		for(int i:vec) t[i].push_back(x);
		s[x]=a[x]+s[fa[x]=lst];
		for(int i:e[x]){
			if(i==lst) continue;
			dfs(i,x);
		}
		vec.pop_back(); 
	}
	void Init(){
		for(int i=1;i<=n;i++) e[i].clear(),t[i].clear();
		scanf("%d%d",&n,&rt);
		for(int i=1;i<=n;i++) scanf("%d",&a[i]);
		for(int i=1,u,v;i<n;i++) scanf("%d%d",&u,&v),e[u].push_back(v),e[v].push_back(u);
		dfs(rt,0);
	}
	int Query1(vector<int>vec){
//		Sleep(500);
		int ans=0;
		for(int i:vec) ans+=s[i];
		return ans;
	}
	int Query1(int x){return Query1(vector<int>{x});}
	void Query2(int k){
//		Sleep(500);
		a[k]=-a[k];
		for(int i:t[k]) s[i]=a[i]+s[fa[i]];
	}
	int Getans(vector<int>vec){
		int fl=1;
		for(int i=1;i<=n;i++) fl&=vec[i-1]==a[i];
		cerr<<(fl?"Accepted\n":"Wrong Answer\n");
		if(!fl){
			cerr<<"ExpectRoot: "<<rt<<'\n';
			exit(0);
		}
		return 1;
	}
}

/*******************Example******************/
void solve(){
	Interactive::Init();//get your data
	
	...//your code
	
	int res=Query1(vector<int>(...));
	
	Query2(int x);
	
	vector<int>vec;
	for(int i=1;i<=n;i++) vec.push_back(/***your ans***/);
	Getans(vec);
}

回复

0 条回复,欢迎继续交流。

正在加载回复...