萌新求助qwq
查看原帖
萌新求助qwq
140360
MeowScore楼主2021/9/3 07:48

萌新倍增LCA写的不好,只有前两个点10pts,后面全都WA

求助qwq

#include<bits/stdc++.h>
using namespace std;
inline int read(){
	int ss=0,ww=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')
			ww=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		ss=ss*10+ch-'0';
		ch=getchar();
	}
	return ss*ww;
}
int n,m,T;
struct QwQ{
	int x;
	int y;
	int z;
}g[50010];
int cmp(QwQ a1,QwQ a2){
	return a1.z>a2.z;
}
int uf[10010];
int get(int x){
	if(x==uf[x])
		return x;
	return uf[x]=get(uf[x]); 
}
int head[10010];
int nex[50010];
int to[50010];
int e[50010];
int cnt=0;
void add(int x,int y,int z){
	cnt++;
	e[cnt]=z;
	to[cnt]=y;
	nex[cnt]=head[x];
	head[x]=cnt;
}
void kru(){
	sort(g+1,g+m+1,cmp);
	for(int i=1;i<=n;i++)
		uf[i]=i;
	for(int i=1;i<=m;i++){
		int x=g[i].x;
		int y=g[i].y;
		int f1=get(x);
		int f2=get(y);
		if(f1!=f2){
			uf[f2]=f1;
			add(g[i].x,g[i].y,g[i].z);
			add(g[i].y,g[i].x,g[i].z);
		}
	}
}
int dep[10010];
int f[10010][50];
int minn[10010][50];
queue<int> q;
int t;
void bfs(){
	q.push(1);
	while(q.size()){
		int x=q.front();
		q.pop();
		for(int i=head[x];i;i=nex[i]){
			int y=to[i];
			if(dep[y]==0){
				dep[y]=dep[x]+1;
				q.push(y);
				f[y][0]=x;
				minn[y][0]=e[i];
				for(int i=t;i>=1;i--){
					f[y][i]=f[f[y][i-1]][i-1];
					minn[y][i]=min(minn[y][i-1],minn[f[y][i-1]][i-1]);
				}
			}
		}
	}
}
int solve(int x,int y){
	int res=1e8;
	if(dep[x]>dep[y])
		swap(x,y);
	for(int i=t;i>=0;i--){
		if(dep[f[y][i]]>=dep[x]){
			res=min(res,minn[y][i]);
			y=f[y][i];
		}
	}
	if(x==y)
		return res;
	for(int i=t;i>=0;i--){
		if(f[x][i]!=f[y][i]){
			x=f[x][i];
			y=f[y][i];
			res=min(res,minn[x][i]);
			res=min(res,minn[y][i]);
		}
	}
	res=min(res,minn[x][0]);
	res=min(res,minn[y][0]);
	return res;
}
int main(){
	n=read();
	m=read();
	for(int i=1;i<=m;i++){
		g[i].x=read();
		g[i].y=read();
		g[i].z=read();
	}
	T=read();
	t=(log(n)/log(2))+1;
	kru();
	dep[1]=1;
	bfs();
	while(T--){
		int x,y;
		cin>>x>>y;
		if(get(x)!=get(y))
			cout<<-1<<endl;
		else
			cout<<solve(x,y)<<endl;
	}
}
2021/9/3 07:48
加载中...