暴力dp求调玄关
查看原帖
暴力dp求调玄关
562569
kingho11楼主2024/10/27 22:11

rt,代码如下

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,k,q,l[N],dp[105][N];
vector <int> v[N];
struct qry{
	int r,c; 
}a[N];
void solve()
{
	memset(dp,0,sizeof(dp));
	cin>>n>>k>>q;
	for(int i=1;i<=n;i++)
	{
		cin>>l[i];
		v[i].clear();
		v[i].push_back(-1);
		for(int j=1;j<=l[i];j++)
		{
			int x;
			cin>>x;
			v[i].push_back(x);
		}
	}
	int maxr=0;
	for(int i=1;i<=q;i++)
	{
		cin>>a[i].r>>a[i].c;
		maxr=max(maxr,a[i].r);
	}
	dp[0][1]=-1;
	for(int p=1;p<=maxr;p++)
	{
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=l[i];j++)
			{
				if(dp[p-1][v[i][j]]!=0 && dp[p-1][v[i][j]]!=i)
				{
					int r=j+k-1;
					int jj=j+1;
					for(;jj<=r && jj<=l[i];jj++)
					{
						if(dp[p][v[i][jj]]) dp[p][v[i][j]]=-1;
						else dp[p][v[i][jj]]=i;
					}
				}
			}
		}
	}
//	for(int i=1;i<=maxr;i++)
//	{
//		for(int j=1;j<=10;j++)
//		{
//			cout<<dp[i][j]<<" ";
//		}
//		cout<<"\n";
//	}
	for(int i=1;i<=q;i++)
	{
		if(dp[a[i].r][a[i].c]==0) cout<<"0\n";
		else cout<<"1\n";
	}
}
int main()
{
	int _;
	cin>>_;
	while(_--)
	{
		solve();
	}
}
2024/10/27 22:11
加载中...