debug失败
非常难受
伸手求助
#include <bits/stdc++.h>
using namespace std;
int n,k;
struct Node
{
int dep;
int st;
int hson;
int top;
int size;
int fat;
int dfn;
}node[50001];
struct Edge
{
int des;
int next;
}edge[100001];
int cnt;
int cnl;
inline void add(int a,int b)
{
cnt++;
edge[cnt].des=b;
edge[cnt].next=node[a].st;
node[a].st=cnt;
return;
}
void dfs1(int poi,int upon,int depth)
{
int vll=0;
node[poi].size=1;
node[poi].fat=upon;
node[poi].dep=depth;
for(int i=node[poi].st;i!=0;i=edge[i].next)
{
int flag=edge[i].des;
if(flag!=upon)
{
dfs1(flag,poi,depth+1);
node[poi].size+=node[flag].size;
if(node[flag].size>vll)
{
vll=node[flag].size;
node[poi].hson=flag;
}
}
}
return;
}
void dfs2(int poi)
{
if(node[node[poi].fat].hson!=poi)
{
node[poi].top=poi;
}
else
{
node[poi].top=node[node[poi].fat].top;
}
cnl++;
node[poi].dfn=cnl;
if(node[poi].hson!=0)
{
dfs2(node[poi].hson);
for(int i=node[poi].st;i!=0;i=edge[i].next)
{
int flag=edge[i].des;
if(flag!=node[poi].hson&&flag!=node[poi].fat)
{
dfs2(flag);
}
}
}
return;
}
int tee[50001];
void Insert(int s,int r)
{
while(node[s].top!=node[r].top)
{
if(node[s].dep>=node[r].dep)
{
tee[node[node[s].top].dfn]++;
tee[node[s].dfn+1]--;
s=node[node[s].top].fat;
}
else
{
tee[node[node[r].top].dfn]++;
tee[node[r].dfn+1]--;
r=node[node[r].top].fat;
}
}
if(s!=r)
{
if(node[s].dep>node[r].dep)
{
tee[node[r].dfn]++;
tee[node[s].dfn+1]--;
}
else
{
tee[node[s].dfn]++;
tee[node[r].dfn+1]--;
}
}
else
{
tee[node[s].dfn]++;
tee[node[s].dfn+1]--;
}
return;
}
int main()
{
scanf("%d %d",&n,&k);
for(int i=1;i<n;i++)
{
int a,b;
scanf("%d %d",&a,&b);
add(a,b);
add(b,a);
}
dfs1(1,1,1);
dfs2(1);
for(int i=1;i<=k;i++)
{
int s,t;
scanf("%d %d",&s,&t);
Insert(s,t);
}
int maxn=-1e9;
for(int i=1;i<=n;i++)
{
tee[i]+=tee[i-1];
maxn=max(maxn,tee[i]);
printf("%d ",tee[i]);
}
// printf("%d\n",maxn);
// system("pause");
return 0;
}