Why 能过F题
  • 板块学术版
  • 楼主封禁用户
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/6/10 22:02
  • 上次更新2023/10/23 13:25:50
查看原帖
Why 能过F题
734533
封禁用户楼主2023/6/10 22:02
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m;
const int N=1e3+10;
int k,x;
int f[N][N];//每个点相连的点
bool vis[N];//标记某个点是否走过
int fa[N];//fa[i]:i是在哪个点的询问后走到的
signed main(){
	cin>>n>>m;
	cin>>k;
	for(int i=1;i<=k;i++){
		cin>>x;
		f[1][i]=x;
	}
	int last=0;//最近一次输出的那个点
	for(int i=1;i<=k;i++){
		if(!vis[f[1][i]]){//没走过
			vis[f[1][i]]=1;//走这个点
			last=f[1][i];
			fa[last]=1;
			cout<<f[1][i]<<endl;
			break;
		}
	}
	while(1){
		cin>>k;
		for(int i=1;i<=k;i++){
			cin>>f[last][i];
			if(f[last][i]==n){//能直接走到目标点
				cout<<n;
				return 0; 
			}
		}
		bool bo=0;//标记这个点所连的点是不是都走过
		for(int i=1;i<=k;i++){
			if(!vis[f[last][i]]){//有一个没走过就走
				vis[f[last][i]]=1;
				fa[f[last][i]]=last;
				last=f[last][i];
				bo=1;
				cout<<last<<endl;
				break;
			}
		}
		if(!bo){//都走过了
			cout<<fa[last]<<endl;//退回去换一个点
			last=fa[last];
		}
	}
}
``
这为啥能过啊……pwp
2023/6/10 22:02
加载中...