QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#556599#7706. Rikka with Linkership2077#AC ✓1048ms5528kbC++231005b2024-09-10 19:35:192024-09-10 19:35:19

Judging History

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

  • [2024-09-10 19:35:19]
  • 评测
  • 测评结果:AC
  • 用时:1048ms
  • 内存:5528kb
  • [2024-09-10 19:35:19]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
constexpr int M=(1<<18)+5;
int n,m,e[18],res[M],cyc[M];
int read(){
	int x=0;char ch=getchar();
	while (!isdigit(ch)) ch=getchar();
	while (isdigit(ch)) x=x*10+ch-48,ch=getchar();
	return x;
}
void solve(){
	n=read();m=read();
	for (int i=0;i<n;i++) e[i]=0;
	for (int i=0;i<m;i++){
		int x=read()-1,y=read()-1;
		e[x]|=1<<y;
	} int ans=n;
	for (int sta=0;sta<1<<n;sta++) res[sta]=0;
	for (int i=n-1;i;i--){ cyc[0]=e[i];
		for (int sta=1;sta<1<<i;sta++) cyc[sta]=0;
		for (int sta=0;sta<1<<i;sta++)
			for (int j=0;j<i;j++) if (~sta>>j&1&&cyc[sta]>>j&1)
				cyc[sta^1<<j]|=e[j];
		for (int sta=0;sta<1<<i;sta++)
			if (cyc[sta]>>i&1) res[sta|1<<i]=1;
	}
	for (int sta=1;sta<1<<n;sta++)
		for (int i=0;i<n;i++)
			if (sta>>i&1)
				res[sta]|=res[sta^1<<i];
	for (int sta=0;sta<1<<n;sta++)
		if (!res[sta]) ans=min(ans,n-__builtin_popcount(sta));
	printf("%d\n",ans+n);
}
int main(){int T=read();while (T--) solve(); return 0;}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3744kb

input:

3
3 2
1 2
2 3
3 3
1 2
2 3
3 1
5 7
1 2
2 3
3 5
5 4
4 2
2 5
3 1

output:

3
4
6

result:

ok 3 number(s): "3 4 6"

Test #2:

score: 0
Accepted
time: 1048ms
memory: 5528kb

input:

1000
18 93
1 6
1 13
2 1
2 8
3 6
4 8
5 4
5 6
5 9
5 10
5 11
5 12
5 13
5 18
6 2
6 4
6 16
7 1
7 2
7 3
7 9
7 10
7 13
7 15
8 6
8 9
9 5
9 8
9 10
9 13
9 14
10 1
10 3
10 4
10 5
10 6
10 8
10 11
10 13
11 1
11 2
11 3
11 4
11 6
11 7
11 9
11 12
11 14
11 15
12 1
12 2
12 4
12 6
12 10
12 13
12 14
12 16
12 17
12 18
1...

output:

23
24
25
25
26
28
26
28
28
27
28
29
27
27
29
28
31
31
30
31
19
17
18
17
19
13
19
18
18
19
20
15
19
15
19
20
18
19
20
15
18
19
18
17
18
17
19
18
18
19
21
20
18
13
14
15
19
17
18
18
20
19
19
20
19
17
20
19
19
16
18
16
18
18
18
19
17
15
20
19
18
20
18
19
18
19
18
19
18
14
18
19
17
20
18
19
19
19
19
19
...

result:

ok 1000 numbers