mcmf WA#2 的处理方式
查看原帖
mcmf WA#2 的处理方式
546939
Hollow_knight_楼主2024/8/5 19:57

#2数据点的答案路线为 1 -> n -> 1

所以我做了如下改动:

原 91pts 代码

void sol1(int u){//x为入点,x+n为出点
	cout<<st[u-n]<<endl;//从1到n遍历
	if(u==2*n){
		return;
	}
	se=u;
	for(int i=head[u];i!=0;i=ed[i].nxt){
		if(ed[i].w==1){
			sol1(ed[i].to+n);
			return;
		}
	}
}
void sol2(int u){
	if(u==1){//从n到1遍历
		return;
	}
	for(int i=head[u];i!=0;i=ed[i].nxt){
		if(ed[i].w==1&&ed[i].to!=se){
			cout<<st[ed[i].to-n]<<endl;
			sol2(ed[i].to-n);
			return;
		}
	}
}
......
sol1(n+1),sol2(n);

现 100pts 代码

void sol1(int u){
	cout<<st[u-n]<<endl;
	if(u==2*n){
		return;
	}
	se=u;
	for(int i=head[u];i!=0;i=ed[i].nxt){
		if(ed[i].w==1||(ed[i].w==0&&u==n+1&&ed[i].to==n)){//这里
			sol1(ed[i].to+n);
			return;
		}
	}
}
void sol2(int u){
	if(u==1){
		return;
	}
	for(int i=head[u];i!=0;i=ed[i].nxt){
		if(((ed[i].w==1&&ed[i].to!=se)||(ed[i].w==2&&u==n&&ed[i].to==n+1))){//这里
			cout<<st[ed[i].to-n]<<endl;
			sol2(ed[i].to-n);
			return;
		}
	}
}
......
sol1(n+1),sol2(n);

修改了两处,其他操作无修改

2024/8/5 19:57
加载中...