求助 不开O2能AC 开了O2 全是TLE
查看原帖
求助 不开O2能AC 开了O2 全是TLE
753993
daitouzero楼主2022/12/12 17:41

代码如下

// lg数组存的是log2(x)的值
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
#include<cmath>
#include<cstring>
#include<bitset>
#define grandfa father[s][i-1]
#define X 20005
#define ll long long
#define mod 10007
#define maxn 100050 
using namespace std;
inline int Max(int a,int b) {return a>b?a:b;}
inline int Min(int a,int b) {return a<b?a:b;}
inline void Swap(int &a,int &b) {a=a^b;b=a^b;a=a^b;}
inline int scan()
{
	register int x=0;
	register char c=getchar();
	while (c<'0'||c>'9') 
	{
		c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		x=(x<<1)+(x<<3)+(c^48);
		c=getchar();
	}
	return x;
}
inline void print(int x)
{
    if(x/10) print(x/10); 
    putchar(x%10+48);
}

int edge_w[100000],edge_Next[100000],edge_to[100000];
int head[100000],total;
inline void add_edge(int u,int v,int w)
{
	total++;
	edge_to[total]=v;
	edge_Next[total]=head[u];
	head[u]=total;
}
int deep[100000],father[100000][25],lg[100000];
inline bool dfs(int s,int fa)
{
	deep[s]=deep[fa]+1;
	father[s][0]=fa;
	for (int i=1;(1<<i)<=deep[s];i++)
		father[s][i]=father[grandfa][i-1];
	int e=head[s],Next;
	while (e)
	{
		Next=edge_to[e];
		Next!=fa?dfs(Next,s):true;
		e=edge_Next[e];
	}
}
inline int LCA (int x,int y)
{
	if (deep[x]<deep[y]) Swap(x,y);
	while (deep[x]>deep[y])
		x=father[x][lg[deep[x]-deep[y]]];
	if (x==y) return x;
	for (int i=lg[deep[x]];i>=0;i--)
		father[x][i]!=father[y][i]?(x=father[x][i],y=father[y][i]):0;
	return father[x][0];
}
int change[100000],ans;
inline void qMaxpress(int s,int fa)
{
	int e=head[s],Next;
	while (e)
	{
		Next=edge_to[e];
		Next!=fa?(qMaxpress(Next,s),change[s]+=change[Next]):0;
		e=edge_Next[e];
	}
	ans=Max(ans,change[s]);
}
int n,k,x,y,lca;
int main()
{
	n=scan();k=scan();
	for(int i=2;i<=n;i++)
	    lg[i]=lg[i>>1]+1;
	for (int i=1;i<=n-1;i++)
	{
		x=scan();y=scan();
		add_edge(x,y,0);
		add_edge(y,x,0);
	}
	dfs(1,0);
	while (k--)
	{
		x=scan();y=scan();
		lca=LCA(x,y);
		change[x]++;change[y]++;change[lca]--;change[father[lca][0]]--;
	}
	qMaxpress(1,0);
	print(ans);
	return 0;
}
2022/12/12 17:41
加载中...