10分求助
查看原帖
10分求助
749194
_Kevin_Kaslana_楼主2024/11/3 11:21
#include<bits/stdc++.h>
using namespace std;
const int N=1e5;
int t;
int n,k,q;
int l[N+5];
map<pair<int,int>,int> s;
int r,c;
bool flag;
map<pair<int,int>,bool> dp;
map<pair<int,int>,int> vis;
map<int,bool> res;
map<int,vector<pair<int,int> > > mp;
void solve()
{
	s.clear();
	dp.clear();
	vis.clear();
	res.clear();
	mp.clear();
	cin>>n>>k>>q;
	for(int i=1;i<=n;i++)
	{
		cin>>l[i];
		for(int j=1;j<=l[i];j++)
		{
			cin>>s[{i,j}];
			res[s[{i,j}]]=1;
			mp[s[{i,j}]].push_back({i,j});
		}
	}
	dp[{0,1}]=1;
	vis[{0,1}]=-1;
	for(int step=1;step<=100;step++)
	{
		for(auto iter:res)
		{
			bool flag=1;
			for(auto it:mp[iter.first])
			{
				if(!flag) break;
				/*
				dp[{step,iter.first}]
				*/
				int isf=it.first;
				int iss=it.second;
				int itf=iter.first;
				int x=max(1,iss-k+1);
				for(int i=iss-1;i>=x&&flag;i--)
				{
					if(dp[{step-1,s[{isf,i}]}]&&vis[{step-1,s[{isf,i}]}]!=isf)
					{
						if(dp[{step,itf}])
						{
							vis[{step,itf}]=-1;
							flag=0;
						}
						else
						{
							dp[{step,itf}]=1;
							vis[{step,itf}]=isf;
						}
					}
				}
			}
		}
	}
	while(q--)
	{
		flag=0;
		cin>>r>>c;
		cout<<dp[{r,c}]<<endl;
	}
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>t;
	while(t--)
	{
		solve();
	}
	return 0;
}

不得不说我代码太史了

2024/11/3 11:21
加载中...