社区讨论

萌新刚学OI...

CF161DDistance in Tree参与者 4已保存回复 21

讨论操作

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

当前回复
21 条
当前快照
1 份
快照标识符
@mi7x7iut
此快照首次捕获于
2025/11/21 05:05
4 个月前
此快照最后确认于
2025/11/21 06:49
4 个月前
查看原帖
RT,蒟蒻已经交了十几遍了,每次都是WA第六个点,在CF上看提交记录,发现相同的代码WA的结果不一样,本地跑却没有错.
不知道是CF的什么黑科技
代码
CPP
#include<bits/stdc++.h>
#define gc getchar  
#define R register int
#define LL long long
using namespace std;
const int N=5e5+5;
int head[N],edge_num;
struct Edge{int next,to,val;}edge[N<<1];
void add(int u,int v)
{
	edge[++edge_num]=(Edge){head[u],v,1};
	head[u]=edge_num;
	edge[++edge_num]=(Edge){head[v],u,1};
	head[v]=edge_num;
}
int n,K,ans;
int size[N],dis[N],v[N];
int rem[N],c[N],ok[N];
int now,root;
void GetSize(int x,int ff)
{
	size[x]=1;
	for(int y,i=head[x];i;i=edge[i].next)
		if((y=edge[i].to)!=ff&&!v[y]) 
			GetSize(y,x),size[x]+=size[y];
}
void GetRoot(int x,int ff,int Size)
{
	int maxpart=Size-size[x];
	for(int i=head[x],y;i;i=edge[i].next)
		if((y=edge[i].to)!=ff&&!v[y]) 
			maxpart=max(maxpart,size[y]),GetRoot(y,x,Size);
	if(maxpart<now)
		now=maxpart,root=x;
}
void GetDis(int x,int ff)
{
	rem[++rem[0]]=dis[x];
	for(R i=head[x];i;i=edge[i].next)
	{
		int y=edge[i].to;
		if(v[y]||y==ff) continue;
		dis[y]=dis[x]+1;
		GetDis(y,x);
	}
}
void DAC(int x)
{
	c[0]=0;ok[0]=1;
	GetSize(x,0);now=n+1;GetRoot(x,0,size[x]);
	v[root]=1;
	for(int y,i=head[root];i;i=edge[i].next)
		if(!v[y=edge[i].to])
		{
			dis[y]=1;
			rem[0]=0;
			GetDis(y,root);
			for(int j=1;j<=rem[0];j++)
				ans+=ok[K-rem[j]],c[++c[0]]=rem[j];
			for(int j=1;j<=rem[0];j++)
				ok[rem[j]]++;
		}
	for(int i=1;i<=c[0];i++) ok[c[i]]=0;
	for(int i=head[root];i;i=edge[i].next)
		if(!v[edge[i].to]) DAC(edge[i].to);
}
int main()
{
	cin>>n>>K;
	ok[0]=1;
	for(int i=1,t1,t2;i<n;i++) cin>>t1>>t2,add(t1,t2);
	DAC(1);
	cout<<ans<<endl;
	return 0;
}
数据:
CPP
50 3
2 1
3 2
4 3
5 4
6 5
7 6
8 7
9 8
10 9
11 10
12 11
13 12
14 13
15 14
16 15
17 16
18 17
19 18
20 19
21 20
22 21
23 22
24 23
25 24
26 25
27 26
28 27
29 28
30 29
31 30
32 31
33 32
34 33
35 34
36 35
37 36
38 37
39 38
40 39
41 40
42 41
43 42
44 43
45 44
46 45
47 46
48 47
49 48
50 49

输出: 47
CF上显示的我的输出:
3281311,5509535,7213471,5247391,6558111,1138102687...(每次都不一样)

回复

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

正在加载回复...