社区讨论

【玄2关】不开O2AC,开了61

P3128[USACO15DEC] Max Flow P参与者 3已保存回复 5

讨论操作

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

当前回复
5 条
当前快照
1 份
快照标识符
@lwue5lh1
此快照首次捕获于
2024/05/31 15:57
2 年前
此快照最后确认于
2024/05/31 19:29
2 年前
查看原帖
rtrt
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=5e4+10;
struct node{
	int to,nxt;
}es[N<<1];
int head[N<<1],num=1,n,k;
int deep[N<<1],fa[N<<1][20];
int tot[N],ans;
inline
void add(int u,int v){
	es[num].to=v;
	es[num].nxt=head[u];
	head[u]=num++;
}
inline
void init(int x,int father){
	fa[x][0]=father;
	deep[x]=deep[father]+1;
	for(int i=1;i<20;i++) fa[x][i]=fa[fa[x][i-1]][i-1];
	for(int i=head[x];~i;i=es[i].nxt){
		if(es[i].to!=father)
			init(es[i].to,x);
	}
}
inline int getlca(int x,int y){
	if(deep[x]<deep[y])swap(x,y);
	for(int i=19;~i;i--){
		if(deep[fa[x][i]]>=deep[y])x=fa[x][i];
	}
	if(x==y)return x;
	for(int i=19;~i;i--){
		if(fa[x][i]!=fa[y][i]) x=fa[x][i],y=fa[y][i];
	}
	return fa[x][0];
}
inline void dfs(int u,int fat){
	for(int i=head[u];~i;i=es[i].nxt){
		int v=es[i].to;
		if(v==fat) continue;
		dfs(v,u);
		tot[u]+=tot[v];
	}
	ans=max(ans,tot[u]);
}
signed main(){
	cin.tie(nullptr)->ios::sync_with_stdio(false);
	cout.tie(nullptr);
	memset(head,-1,sizeof(head));
	memset(fa,-1,sizeof(fa));
	cin>>n>>k;
	for(int i=1;i<n;i++){
		int a,b;
		cin>>a>>b;
		add(a,b);add(b,a);
	}
	init(1,-1);
	for(int i=1;i<=k;i++){
		int u,v;
		cin>>u>>v;
		int Lca=getlca(u,v);
		++tot[u];++tot[v];--tot[Lca];--tot[fa[Lca][0]];
	}
	dfs(1,-1);
	cout<<ans;
	return 0;
}

回复

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

正在加载回复...