P1967 0分悬2关求条
  • 板块学术版
  • 楼主20090818Cc
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/1 21:54
  • 上次更新2024/11/2 08:05:59
查看原帖
P1967 0分悬2关求条
1268457
20090818Cc楼主2024/11/1 21:54

RT

#include<bits/stdc++.h>
#define fr(n) for(int i=1;i<=n;i++)
using namespace std;
const int M=1e5+110;
//
int read(){
	int sum=0,k=1;
	char c=getchar();
	while(c>'9'||c<'0'){
		if(c=='-') k=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		sum=sum*10+c-'0';
		c=getchar();
	}
	return sum*k;
}
//
int fa[M];
int find(int x){
	if(x==fa[x]) return fa[x];
	return fa[x]=find(fa[x]);
}
//
struct w{
	int next,to,w;
}e[M];
int head[M],k=0;
void add(int u,int v,int w){
	k++;
	e[k].next=head[u];
	e[k].to=v;
	e[k].w=w;
	head[u]=k;
}
//
struct node{
	int u,v,w,bian;
}ee[M];
bool cmp(node x,node y){
	return x.w>y.w;
}
//
int n,m,w[M][26];
void jian(){
	fr(n) fa[i]=i;
	sort(ee+1,ee+1+m,cmp);
	fr(m) if(find(ee[i].u)!=find(ee[i].v)){
		fa[find(ee[i].u)]=find(ee[i].v);
		add(ee[i].u,ee[i].v,ee[i].w);
		add(ee[i].v,ee[i].u,ee[i].w); 
	}
}
//
int d[M],dp[M][26];
void dfs(int u,int fa,int ww){
	d[u]=d[fa]+1;
	dp[u][0]=fa;
	w[u][0]=ww;
	for(int i=1;(1<<i)<=d[u];i++) dp[u][i]=dp[dp[u][i-1]][i-1],w[u][i]=min(w[u][i-1],w[dp[u][i-1]][i-1]);
	for(int i=head[u];i;i=e[i].next) if(e[i].to!=fa) dfs(e[i].to,u,e[i].w);
}
int LCA(int a,int b){
	int ans=0x3f3f3f3f;
	if(d[a]>d[b]) swap(a,b);
	for(int i=20;i>=0;i--) if(d[b]-(1<<i)>=d[a]) b=dp[b][i],ans=min(ans,w[b][i]);
	if(a==b) return ans;
	for(int i=20;i>=0;i--) if(dp[a][i]!=dp[b][i]){
		ans=min(ans,min(w[b][i],w[a][i]));
		a=dp[a][i],b=dp[b][i];
		
	}
	return min(ans,min(w[b][0],w[a][0])); 
}
//
int main(){
	memset(w,0x3f3f3f3f,sizeof(w));
	memset(fa,0x3f3f3f3f,sizeof(fa));
	n=read(),m=read();
	fr(m) ee[i].u=read(),ee[i].v=read(),ee[i].w=read();
	jian();
	fr(n) if(i==fa[i]) dfs(i,i,0x3f3f3f3f);
	int q=read();
	while(q--){
		int x=read(),y=read();
		if(find(x)!=find(y)){
			cout<<-1<<endl;
			continue;
		}
		cout<<LCA(x,y)<<endl;
	}	
	return 0;
}
/*
4 3
1 2 4
2 3 3
3 1 1
3
1 3
1 4
1 3
*/

可能明天早上才能看到然后关注

谢谢dalao%%%

2024/11/1 21:54
加载中...