QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#554327#9241. Sphinxlgvc0 0ms0kbC++234.2kb2024-09-09 10:19:262024-09-09 10:19:27

Judging History

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

  • [2024-09-09 10:19:27]
  • 评测
  • 测评结果:0
  • 用时:0ms
  • 内存:0kb
  • [2024-09-09 10:19:26]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#include "sphinx.h"
int n,m;
vector<int>C,G;
int fa[255],u[100005],v[100005];
int findfather(int x){
	return x==fa[x]?x:fa[x]=findfather(fa[x]);
}
int aa[255];
int findaa(int x){
	return x==aa[x]?x:aa[x]=findaa(aa[x]);
}
bool fff=0;int ct=0;
int qqq(std::vector<int> x) {
	ct++;
	if(ct>=27501) {
		fff=1;
		return 0;
	}
	int tx=perform_experiment(x);
	return tx;
}
vector<int>gg[255];
int ss[255],vist[255],tt,I;
int query(int l,int r){
	for(int i=0;i<n;++i)vist[i]=0,aa[i]=i,C[i]=n;
	for(int i=l;i<=r;++i)for(auto cu:gg[ss[i]])vist[cu]=1,C[cu]=-1;
	vist[I]=1,C[I]=-1;
	for(int i=0;i<m;++i)if(!vist[u[i]]&&!vist[v[i]]){
		int fu=findaa(u[i]),fv=findaa(v[i]);
		if(fu!=fv)aa[fu]=fv;
	}
	int cnt=0;
	for(int i=0;i<n;++i)if(!vist[i]&&aa[i]==i)++cnt;
	return r-l+1+1+cnt-qqq(C);
}
double ef=0.382;
void solve(int l,int r,int k){
	if(!k)return;
	if(l==r){
		fa[ss[l]]=I;
		return;
	}
	int mid=(l+r)>>1;
	mid=min(r+0.0,l+ef*(r-l));
	int k1=query(l,mid);
	solve(l,mid,k1);
	solve(mid+1,r,k-k1);
}
int s1[255],s2[255];
vector<int>g[255];
int dep[255];
void dfs(int x){
	vist[x]=1;
	for(auto cu:g[x])if(!vist[cu]){
		dep[cu]=dep[x]+1;
		dfs(cu);
	}
}
int p[255],v1[255],v2[255],ss1[255],ss2[255];
int query1(int l,int r,int d){
	for(int i=0;i<n;++i)vist[i]=0,aa[i]=i,C[i]=d;
	for(int i=l;i<=r;++i)for(auto cu:gg[ss1[i]])vist[cu]=1,C[cu]=-1;
	for(int i=0;i<m;++i)if(!vist[u[i]]&&!vist[v[i]]){
		int fu=findaa(u[i]),fv=findaa(v[i]);
		if(fu!=fv)aa[fu]=fv;
	}
	int cnt=0;
	for(int i=0;i<n;++i)if(!vist[i]&&aa[i]==i)++cnt;
	return r-l+1+cnt-qqq(C);
}
int query2(int l,int r,int d){
	for(int i=0;i<n;++i)vist[i]=0,aa[i]=i,C[i]=d;
	for(int i=l;i<=r;++i)for(auto cu:gg[ss2[i]])vist[cu]=1,C[cu]=-1;
	for(int i=0;i<m;++i)if(!vist[u[i]]&&!vist[v[i]]){
		int fu=findaa(u[i]),fv=findaa(v[i]);
		if(fu!=fv)aa[fu]=fv;
	}
	int cnt=0;
	for(int i=0;i<n;++i)if(!vist[i]&&aa[i]==i)++cnt;
	return r-l+1+cnt-qqq(C);
}
void solve1(int l,int r,int d){
	if(l==r){
		G[ss1[l]]=d;v1[ss1[l]]=1;
		return;
	}
	int mid=min(r+0.0,l+(r-l)*ef);
	int f1=query1(l,mid,d);
	if(!f1){
		solve1(mid+1,r,d);
	}else{
		solve1(l,mid,d);
		if(query1(mid+1,r,d))solve1(mid+1,r,d);
	}
}
void solve2(int l,int r,int d){
	if(l==r){
		G[ss2[l]]=d;v2[ss2[l]]=1;
		return;
	}
	int mid=min(r+0.0,l+(r-l)*ef);
	int f1=query2(l,mid,d);
	if(!f1){
		solve2(mid+1,r,d);
	}else{
		solve2(l,mid,d);
		if(query2(mid+1,r,d))solve2(mid+1,r,d);
	}
}
vector<int>find_colours(int N,vector<int>X,vector<int>Y){
	n=N;m=X.size();
	C.resize(n);G.resize(n);
	for(int i=0;i<m;++i){
		u[i]=X[i],v[i]=Y[i];
	}
	for(int i=0;i<n;++i)fa[i]=i;
	for(int i=0;i<n;++i)p[i]=i;
	mt19937 mt(1725848345);
	if(m>n-1) {
		shuffle(p,p+n,mt);
		for(int x=1;x<n;++x){
			int i=p[x];
			I=i;
			for(int j=0;j<x;++j)gg[p[j]].clear();
			for(int j=0;j<x;++j){
				gg[findfather(p[j])].emplace_back(p[j]);
			}
			tt=0;
			for(int j=0;j<x;++j)if(gg[p[j]].size())ss[++tt]=p[j];
			solve(1,tt,query(1,tt));
		}
	}
	for(int j=0;j<n;++j)gg[j].clear();
	for(int j=0;j<n;++j){
		gg[findfather(j)].emplace_back(j);
	}
	for(int i=0;i<n;++i)g[i].clear();
	for(int i=0;i<m;++i)if(findfather(u[i])!=findfather(v[i])){
		int fu=fa[u[i]],fv=fa[v[i]];
		g[fu].emplace_back(fv);
		g[fv].emplace_back(fu);
	}
	int r=findfather(0);
	for(int i=0;i<n;++i)vist[i]=0;
	dep[r]=0;dfs(r);
	int t1=0,t2=0;
	for(int i=0;i<n;++i)if(fa[i]==i){
		if(dep[i]%2)s1[++t1]=i;
		else s2[++t2]=i;
	}
	if(t1+t2==1){
		for(int i=0;i<n;++i){
			for(int j=0;j<n;++j)G[j]=(j==0?-1:i);
			if(qqq(G)==1){
				for(int j=0;j<n;++j)G[j]=i;
				break;
			}
		}
		return G;
	}
	for(int i=0;i<n;++i)v1[i]=v2[i]=0;
	for(int i=0;i<n;++i)p[i]=i;
	shuffle(p,p+n,mt);
	printf("%d %d\n",t1,t2);
	for(int dd=0;dd<n;++dd){
		int d=p[dd];
		int tt1=0,tt2=0;
		for(int i=1;i<=t1;++i)if(!v1[s1[i]]){
			ss1[++tt1]=s1[i];
		}
		for(int i=1;i<=t2;++i)if(!v2[s2[i]]){
			ss2[++tt2]=s2[i];
		}
		shuffle(ss1+1,ss1+tt1+1,mt);
		shuffle(ss2+1,ss2+tt2+1,mt);
		if(tt1&&query1(1,tt1,d))solve1(1,tt1,d);
		if(tt2&&query2(1,tt2,d))solve2(1,tt2,d);
	}
	if(fff) for(int i=0;i<n;i++) G[i]=fa[i];
	else for(int i=0;i<n;++i)G[i]=G[fa[i]];
	return G;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Runtime Error

Test #1:

score: 0
Runtime Error

input:

1978433568
2
1
0
1

output:

1 1
877694080
0
-1

result:


Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Runtime Error

Test #34:

score: 0
Runtime Error

input:

1978433568
250
249
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10
11
11
12
12
13
13
14
14
15
15
16
16
17
17
18
18
19
19
20
20
21
21
22
22
23
23
24
24
25
25
26
26
27
27
28
28
29
29
30
30
31
31
32
32
33
33
34
34
35
35
36
36
37
37
38
38
39
39
40
40
41
41
42
42
43
43
44
44
45
45
46
46
47
47
48
48
49
49
50
...

output:

125 125
877694080
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
90
-1
...

result:


Subtask #4:

score: 0
Runtime Error

Test #43:

score: 0
Runtime Error

input:

1978433568
250
31125
0
1
0
2
0
3
0
4
0
5
0
6
0
7
0
8
0
9
0
10
0
11
0
12
0
13
0
14
0
15
0
16
0
17
0
18
0
19
0
20
0
21
0
22
0
23
0
24
0
25
0
26
0
27
0
28
0
29
0
30
0
31
0
32
0
33
0
34
0
35
0
36
0
37
0
38
0
39
0
40
0
41
0
42
0
43
0
44
0
45
0
46
0
47
0
48
0
49
0
50
0
51
0
52
0
53
0
54
0
55
0
56
0
57
0
5...

output:

877694080
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
-1
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250
250...

result:


Subtask #5:

score: 0
Skipped

Dependency #1:

0%