社区讨论
【玄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 年前
,
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 条回复,欢迎继续交流。
正在加载回复...