QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#878614#9677. 基础博弈练习题DaiRuiChen0070 81ms143868kbC++172.2kb2025-02-01 16:20:032025-02-01 16:20:04

Judging History

This is the latest submission verdict.

  • [2025-02-01 16:20:04]
  • Judged
  • Verdict: 0
  • Time: 81ms
  • Memory: 143868kb
  • [2025-02-01 16:20:03]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+5,inf=1e9;
int n,m,q,a[MAXN],b[MAXN];
int dcnt,dfn[MAXN],low[MAXN],tp,stk[MAXN],scnt,bl[MAXN],sz[MAXN];
bool ins[MAXN];
vector <int> G[MAXN],E[MAXN],V[MAXN];
int ord[MAXN],deg[MAXN];
void tarjan(int u) {
	dfn[u]=low[u]=++dcnt,stk[++tp]=u,ins[u]=true;
	for(int v:G[u]) {
		if(!dfn[v]) tarjan(v),low[u]=min(low[u],low[v]);
		else if(ins[v]) low[u]=min(low[u],dfn[v]);
	}
	if(dfn[u]==low[u]) {
		for(++scnt;ins[u];--tp) bl[stk[tp]]=scnt,ins[stk[tp]]=false,V[scnt].push_back(stk[tp]);
	}
}
int f[MAXN],g[MAXN],id[MAXN],d[MAXN];
vector <int> qy[MAXN];
int pr[MAXN],sf[MAXN],las[MAXN];
bool vis[MAXN];
signed main() {
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	cin>>n>>m>>q;
	memset(id,0x3f,sizeof(id));
	for(int i=1;i<=n;++i) cin>>a[i];
	for(int i=1;i<=q;++i) cin>>b[i],id[b[i]]=min(id[b[i]],i);
	for(int i=1,u,v;i<=m;++i) cin>>u>>v,G[u].push_back(v);
	for(int i=1;i<=n;++i) if(!dfn[i]) tarjan(i);
	for(int i=1;i<=n;++i) for(int j:G[i]) if(bl[i]!=bl[j]) E[bl[i]].push_back(bl[j]),++deg[bl[j]];
	queue <int> Q;
	for(int i=1;i<=scnt;++i) if(!deg[i]) Q.push(i);
	for(int i=1;i<=scnt;++i) {
		int u=ord[i]=Q.front(); Q.pop();
		for(int v:E[u]) if(!--deg[v]) Q.push(v);
	}
	for(int u=1;u<=scnt;++u) {
		int t=inf;
		for(int x:V[u]) t=min(t,id[a[x]]);
		qy[t].push_back(u);
	}
	for(int i=q,hd=0;i>=1;--i) {
		sf[i]=hd,pr[hd]=i,hd=i;
		if(las[b[i]]) {
			int x=las[b[i]];
			sf[pr[x]]=sf[x],pr[sf[x]]=pr[x];
		}
		las[b[i]]=i;
		for(int u:qy[i]) {
			for(int x:V[u]) vis[a[x]]=true;
			d[u]=inf;
			for(int t=hd;t;t=sf[t]) if(!vis[b[t]]) {
				d[u]=t; break;
			}
			for(int x:V[u]) vis[a[x]]=false;
		}
	}
	for(int o=scnt;o>=1;--o) {
		int u=ord[o]; f[u]=g[u]=inf;
		for(int v:E[u]) f[u]=min({f[u],f[v],g[v]});
		int t=inf;
		for(int x:V[u]) t=min(t,id[a[x]]);
		if(t+1>=f[u]) continue;
		if(V[u].size()==1) g[u]=t;
		else {
			int h=min(f[u]-1,d[u]);
			if((h-t)%2==0) ++t;
			g[u]=f[u]=t;
		}
//		for(int i:t[u]) if(i+1<f[u]) {
//			g[u]=i;
//			if(sz[u]>1) f[u]=i;
//		}
	}
	for(int i=1;i<=n;++i) cout<<(f[bl[i]]==inf?-1:f[bl[i]]-1)<<" \n"[i==n];
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Runtime Error

Test #1:

score: 0
Runtime Error

input:

83 93 13
8 9 10 7 7 7 6 3 1 10 6 2 5 7 1 3 4 2 1 10 7 4 8 9 2 2 1 9 2 5 1 7 8 6 1 9 9 10 4 1 2 9 2 3 4 2 9 10 8 1 4 1 8 4 1 4 4 7 4 8 2 9 2 5 2 2 3 3 8 5 2 9 3 10 8 8 1 6 6 1 6 7 10
7 5 10 3 2 2 7 4 8 7 6 6 5
56 36
33 41
32 62
37 7
6 53
41 13
9 36
44 77
38 62
76 16
72 5
40 13
55 60
5 78
72 45
13 44
...

output:


result:


Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Runtime Error

Test #6:

score: 30
Accepted
time: 81ms
memory: 141720kb

input:

100000 355071 10000
5 7 4 7 4 1 10 5 9 4 9 4 3 10 5 4 9 1 7 10 1 6 10 3 10 9 8 4 6 3 10 8 6 8 3 5 10 9 7 7 1 3 8 8 6 2 8 4 2 9 1 10 3 6 3 8 9 10 5 7 3 2 1 5 7 4 3 4 6 4 2 7 2 5 5 6 4 6 7 4 4 6 4 2 3 9 9 9 10 8 1 6 7 2 9 8 2 3 1 6 9 4 10 3 10 1 2 3 3 4 1 1 1 5 8 6 8 3 1 6 2 9 5 9 4 7 2 10 7 5 2 2 7 4...

output:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

result:

ok 100000 numbers

Test #7:

score: 30
Accepted
time: 75ms
memory: 143868kb

input:

100000 300561 10000
6 3 6 10 10 9 7 3 6 4 5 4 1 2 3 2 10 6 3 7 8 7 10 5 9 10 2 3 9 5 6 10 9 1 4 9 1 10 7 2 9 10 5 5 9 3 5 5 5 9 9 5 1 7 5 10 8 6 8 4 5 9 2 10 1 6 4 10 10 9 2 1 10 1 9 5 3 2 9 3 4 8 10 7 5 2 4 5 3 6 9 7 5 10 2 7 4 7 10 8 1 7 7 1 7 7 6 6 7 1 5 4 6 2 1 8 6 10 6 10 1 5 8 4 6 2 10 6 10 4 ...

output:

0 4 0 0 3 0 0 4 0 0 0 0 0 0 0 0 0 0 1 0 0 1 7 0 1 2 0 0 0 0 4 0 0 1 0 0 0 2 0 0 0 3 0 0 1 0 0 0 3 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 1 0 9 0 0 0 2 0 3 1 0 2 1 0 0 0 2 0 0 0 0 0 0 3 0 0 0 0 0 2 2 0 0 1 0 0 0 0 0 1 0 0 1 0 2 0 6 0 0 1 5 0 0 3 0 0 1 2 0 2 3 0 0 2 0 1 1 9 0 2 5 2 0 2 1 3 1 6 4 0 0 1 0 2 1 0 ...

result:

ok 100000 numbers

Test #8:

score: 0
Runtime Error

input:

500000 1770902 50000
4 7 2 3 6 10 8 2 2 6 2 3 3 7 3 1 5 2 1 10 2 6 3 4 2 8 10 6 6 10 9 3 3 2 9 10 4 5 3 9 7 10 4 3 6 6 4 9 4 4 4 1 9 5 6 10 3 7 5 8 10 1 6 5 1 7 9 10 2 4 6 9 6 2 2 8 4 7 9 1 9 4 6 4 6 3 9 2 2 1 1 1 8 3 10 10 2 2 5 15 20 18 17 15 12 11 11 11 11 12 13 19 18 20 15 11 11 20 10 14 13 14 1...

output:


result:


Subtask #4:

score: 0
Skipped

Dependency #3:

0%

Subtask #5:

score: 0
Skipped

Dependency #4:

0%