RE一个点,求助大佬
查看原帖
RE一个点,求助大佬
579866
zhangjunzhe楼主2023/8/11 16:03
#include<bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
#define mk make_pair
using namespace std;
int getin(){
	char c=getchar();
	int ans=0,f=1;
	while(!isdigit(c)){
		if(c=='-') f*=-1;
		c=getchar();
	}
	while(isdigit(c)){
		ans=(ans<<3)+(ans<<1)+(c^48);
		c=getchar();
	}
	return ans*f;
}
void puto(int x){
	if(x<0){
		putchar('-');
		x=-x;
	}
	if(x>=10)puto(x/10);
	putchar('0'+x%10);
}
const int N=3e5+5;
struct node{
	int next,to,dis;
}e[N<<1];
struct node2{
	int u,v,lca,dis;
}a[N];
int h[N],cnt;
void add(int u,int v,int w){
	e[++cnt]={h[u],v,w};
	h[u]=cnt;
}
int n,m;
int g[N][30],lg[N],d[N],b[N],c[N],dis[N];
bool vis[N];
void dfs(int u,int fa){
	g[u][0]=fa;
	d[u]=d[fa]+1;
	for(int i=h[u];i;i=e[i].next){
		int v=e[i].to;
		if(v==fa)continue;
		dis[v]=dis[u]+e[i].dis;
		c[v]=e[i].dis;
		dfs(v,u);
	}
}
void dp(int u){
	for(int i=h[u];i;i=e[i].next){
		int v=e[i].to;
		if(v==g[u][0])continue;
		dp(v);
		b[u]+=b[v];
	}
}
bool check(int x){
	memset(b,0,sizeof(b));
	int tot=0,maxn=0;
	for(int i=1;i<=m;i++){
		if(a[i].dis>x){
			tot++;
			b[a[i].u]++;b[a[i].v]++;
			b[a[i].lca]-=2;
			maxn=max(maxn,a[i].dis);
		}
	}
	if(tot==0)return true;
	dp(1);
	for(int i=2;i<=n;i++)if(b[i]==tot&&maxn-c[i]<=x)return true;
	return false;	
}
int lca(int u,int v){
	if(d[u]<d[v])swap(u,v);
	for(int i=lg[d[u]];i>=0;i--) if(d[g[u][i]]>=d[v])u=g[u][i];
	if(u==v)return u;
	for(int i=lg[d[u]];i>=0;i--) if(g[u][i]!=g[v][i])u=g[u][i],v=g[v][i];
	return g[u][0];
}
int main(){
	cin>>n>>m;
	for(int i=1;i<n;i++){
		int u,v,w;
		scanf("%d%d%d",&u,&v,&w);
		add(u,v,w);add(v,u,w);
	}
	dfs(1,0);
	lg[0]=-1;
	for(int i=1;i<=n;i++)lg[i]=lg[i>>1]+1;
	for(int j=1;j<=lg[n];j++)
	for(int i=1;i<=n;i++)g[i][j]=g[g[i][j-1]][j-1];
	for(int i=1;i<=m;i++){
		scanf("%d%d",&a[i].u,&a[i].v);
		a[i].lca=lca(a[i].u,a[i].v);
		a[i].dis=dis[a[i].u]+dis[a[i].v]-2*dis[a[i].lca];
	}
	int l=-1,r=1e9;
	while(l+1<r){
		int mid=l+r>>1;
		if(check(mid))r=mid;
		else l=mid;
	}
	cout<<r;
	return 0;
}

2023/8/11 16:03
加载中...