奇怪的BUG卡了我2.5小时
查看原帖
奇怪的BUG卡了我2.5小时
1041850
chenjunnan楼主2025/8/3 10:58

以下为AC代码

#include<bits/stdc++.h>
#define ll long long
#define f(i,a,b,n) for(int i=a;i<=b;i+=n)
#define ff(i,a,b,n) for(int i=a;i>=b;i-=n)
using namespace std;
int n,K,x,y,dp[100005][25],w[100005];
vector<int> tree[100005];
void dfs(int k,int fa){
	for(int i=0;i<=K;i++) dp[k][i]+=w[k];
	for(int i=0;i<tree[k].size();i++){
		int v=tree[k][i];
		if(v==fa) continue;
		dfs(v,k);
		for(int j=1;j<=K;j++) dp[k][j]+=dp[v][j-1];
	}
}
void finds(int k,int fa){
	for(int i=0;i<tree[k].size();i++){
		int v=tree[k][i];
		if(v==fa) continue;
		for(int j=K;j>=2;j--) dp[v][j]+=dp[k][j-1]-dp[v][j-2];
		dp[v][1]+=dp[k][0];
		finds(v,k);
	}
}
int main(){
	cin>>n>>K;
	for(int i=1;i<n;i++){
		cin>>x>>y;
		tree[x].push_back(y);
		tree[y].push_back(x);
	}
	for(int i=1;i<=n;i++) cin>>w[i];
	dfs(1,-1);
	finds(1,-1);
	for(int i=1;i<=n;i++) cout<<dp[i][K]<<endl;
	return 0;
}

以下为 90 pts RE on #5 代码

#include<bits/stdc++.h>
#define ll long long
#define f(i,a,b,n) for(int i=a;i<=b;i+=n)
#define ff(i,a,b,n) for(int i=a;i>=b;i-=n)
using namespace std;
int n,K,x,y,dp[100005][25],w[100005];
vector<int> tree[100005];
void dfs(int k,int fa){
	f(i,0,K,1) dp[k][i]+=w[k];
	f(i,0,tree[k].size()-1,1){
		int v=tree[k][i];
		if(v==fa) continue;
		dfs(v,k);
		f(j,1,K,1) dp[k][j]+=dp[v][j-1];
	}
}
void finds(int k,int fa){
	f(i,0,tree[k].size()-1,1){
		int v=tree[k][i];
		if(v==fa) continue;
		ff(j,K,2,1) dp[v][j]+=dp[k][j-1]-dp[v][j-2];
		dp[v][1]+=dp[k][0];
		finds(v,k);
	}
}
int main(){
	scanf("%d%d",&n,&K);
	f(i,1,n-1,1){
		scanf("%d%d",&x,&y);
		tree[x].push_back(y);
		tree[y].push_back(x);
	}
	f(i,1,n,1) scanf("%d",&w[i]);
	dfs(1,-1);
	finds(1,-1);
	f(i,1,n,1) printf("%d\n",dp[i][K]);
	return 0;
}

唯二区别在于for循环的宏定义与否以及格式读写和流输入输出的不同

这是为什么,其他题目没有出现过这种问题

2025/8/3 10:58
加载中...