QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#858725#9677. 基础博弈练习题peimudaCompile Error//C++112.6kb2025-01-16 21:11:082025-01-16 21:11:09

Judging History

你现在查看的是最新测评结果

  • [2025-01-16 21:11:09]
  • 评测
  • [2025-01-16 21:11:08]
  • 提交

answer

#include<set>
#include<map>
#include<queue>
#include<vector>
#include<algorithm>
#include<bits/stdc++.h>
#define pr pair
#define f first
#define s second
#define ll long long
#define mp make_pair
#define pll pr<ll,ll>
#define pii pr<int,int>
#define piii pr<int,pii>
using namespace std;
int a[1000006];
int b[1000006];
int ap[1000006];
vector<int> qr[1000006];
vector<int> hd[1000006];
vector<int> e[1000006];
vector<int> f[1000006];
bool bd[1000006];
int nx[1000006],pf[1000006];
int gq[1000006];
int mi[1000006],ans[1000006];
bool vd[1000006];
int t;
vector<int> ls;
int dfn[1000006];
void dfs(int x)
{
	if(vd[x]) return;
	vd[x]=1;
	for(int to:f[x]) dfs(to);
	dfn[t++]=x;
}
void df(int x)
{
	if(vd[x]) return;
	vd[x]=1;
	ls.push_back(x);
	for(int to:e[x]) dfs(to);
}
int main()
{
	ios_base::sync_with_stdio(0);
	int n,m,k;
	cin>>n>>m>>k;
	for(int i=0;i<n;i++) cin>>a[i],a[i]--;
	for(int i=0;i<n;i++) ap[i]=k+1;
	int x;
	for(int i=0;i<k;i++)
	{
		cin>>x;
		x--;
		b[i]=x;
		ap[x]=min(ap[x],i);
	}
	int u,v;
	while(m--)
	{
		cin>>u>>v;
		u--;
		v--;
		e[u].push_back(v);
		f[v].push_back(u);
	}
	for(int i=0;i<n;i++) dfs(i);
	reverse(dfn,dfn+n);
	for(int i=0;i<n;i++) vd[i]=0;
	for(int i=0;i<n;i++)
	{
		int j=dfn[i];
		if(vd[i]) continue;
		ls.clear();
		df(j);
		int st=k-1;
		for(int l:ls) st=min(st,ap[a[l]]);
		hd[st].push_back(i);
		for(int l:ls) qr[i].push_back(a[l]);
	}
	for(int i=0;i<=n;i++) ap[i]=k+1;
	for(int i=0;i<=n;i++) nx[i]=i+1,pf[i+1]=i;
	nx[n+1]=0;
	pf[0]=n+1;
	for(int i=k-1;i>=0;i--)
	{
		for(int j:hd[i])
		{
			for(int l:qr[l]) bd[l]=1;
			int c=nx[n+1];
			for(;bd[c];c=nx[c]);
			gq[j]=ap[c];
			for(int l:qr[l]) bd[l]=0;
		}
		int g=b[i];
		ap[g]=i;
		pf[nx[g]]=nx[g];
		nx[pf[g]]=pf[g];
		nx[g]=nx[n+1];
		pf[nx[n+1]]=g;
		nx[n+1]=g;
		pf[g]=n+1;
	}
	for(int i=0;i<n;i++) vd[i]=0;
	for(int i=0;i<n;i++) mi[i]=k+1,ans[i]=k+1;
	for(int i=0;i<n;i++)
	{
		int j=dfn[i];
		if(vd[j]) continue;
		ls.clear();
		df(j);
		int st=k+1;
		for(int l:ls) st=min(st,ap[a[l]]);
		int o=gq[i];
		int fd=k+1;
		for(int l:ls) for(int p:e[l]) fd=min(fd,mi[p]);
		int td=fd;
		if(ls.size()>1)
		{
			if(st<fd)
			{
				int kz=min(o-1,fd);
				if((kz-st)%2==1) td=st+1;
				else td=st;
			}
			for(int l:ls) mi[l]=td,ans[l]=td;
		}
		else
		{
			if(st<fd-1) td=st;
			mi[ls[0]]=td;
			ans[ls[0]]=fd;
		}
//		cout<<"-----\n";
//		for(int l:ls) cout<<l<<' ';
//		cout<<endl;
//		cout<<"F "<<i<<' '<<j<<"  "<<st<<' '<<td<<' '<<fd<<' '<<o<<endl;
	}
	for(int i=0;i<n;i++) cout<<(ans[i]>=k?-1:ans[i])<<' ';
	cout<<'\n';
	return 0;
}

Details

answer.code: In function ‘int main()’:
answer.code:91:38: error: ‘l’ was not declared in this scope
   91 |                         for(int l:qr[l]) bd[l]=1;
      |                                      ^
answer.code:95:38: error: ‘l’ was not declared in this scope
   95 |                         for(int l:qr[l]) bd[l]=0;
      |                                      ^