社区讨论
萌新刚学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的结果不一样,本地跑却没有错.
代码
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;
}
数据:
CPP50 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
输出:
47CF上显示的我的输出:
3281311,5509535,7213471,5247391,6558111,1138102687...(每次都不一样)
回复
共 21 条回复,欢迎继续交流。
正在加载回复...