社区讨论

样例没换行!!!

P1967[NOIP 2013 提高组] 货车运输参与者 2已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@m5fbxfx0
此快照首次捕获于
2025/01/02 20:55
去年
此快照最后确认于
2025/11/04 12:03
4 个月前
查看原帖
服了TAT
CPP
#include<bits/stdc++.h>
using namespace std;

const int N=10000+10;
const int M=50000+10;
int n,m,k,tot,cnt,qq;
int fa[N];
int f[N][20],dep[N];
int sum[N][20]/*n向上走最短距离*/,elast[N];
bool vis[N];
struct node{
	int x,y,z;
}a[M];
struct mode{
	int y,next,z;
}e[N*2];//存图的数组 
void add(int x,int y,int z){
	e[++cnt].y=y;
	e[cnt].z=z;
	e[cnt].next=elast[x];
	elast[x]=cnt;
}//建图的 
void dfs(int u,int faa){
	f[u][0]=faa;
	dep[u]=dep[faa]+1;
	vis[u]=true;//防止根节点错了
	for(int j=1;j<=k;j++){
		f[u][j]=f[f[u][j-1]][j-1];
		sum[u][j]=min(sum[u][j-1],sum[f[u][j-1]][j-1]);
	} 
	for(int i=elast[u];i;i=e[i].next){
		int v=e[i].y,z=e[i].z;
		if(v!=faa){
			sum[v][0]=z;
			dfs(v,u);
		}
	}
}
int lca(int x,int y){
	if(dep[x]<dep[y]) swap(x,y);
	int ans=1e9;
	for(int i=k;i>=0;i--){
		if(dep[f[x][i]]>=dep[y]){
			ans=min(ans,sum[x][i]);
			x=f[x][i];
		}
	}
	if(x==y) return ans;
	for(int i=k;i>=0;i--){
		if(f[x][i]!=f[y][i]){
			ans=min(ans,min(sum[x][i],sum[y][i]));
			x=f[x][i];
			y=f[y][i];
		}
	}
	ans=min(ans,min(sum[x][0],sum[y][0]));
	return ans;
}
int getfa(int v){
	if(fa[v]==v) return v;
	else {
		int j=getfa(fa[v]);
		fa[v]=j;
		return fa[v];
	}
}//找爸爸
bool cmp(node a,node b){
	return a.z>b.z;
}

int main(){
	scanf("%d%d",&n,&m);
	k=log2(n);
	for(int i=1;i<=n;i++) fa[i]=i;
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
	}
	sort(a+1,a+1+m,cmp);	
	for(int i=1;i<=m && tot<n-1;i++){
		int fx=getfa(a[i].x);
		int fy=getfa(a[i].y);
		if(fx!=fy){
			fa[fx]=fy;
			tot++;
			add(a[i].x,a[i].y,a[i].z);
			add(a[i].y,a[i].x,a[i].z);
		}
	}
	for(int i=1;i<=n;i++) {
		if(!vis[i]){
			dfs(i,0);
		}
	}
	scanf("%d",&qq);
	for(int i=1;i<=qq;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		if(getfa(x)!=getfa(y)) printf("-1\n");
		else{
			printf("%d\n",lca(x,y));
		} 
	}
	return 0;
}
做出来没有问题,用次数换,样例他没有换行!!!全WA,求大佬告诉,怎么搞,找管理员?

回复

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

正在加载回复...