QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#556491#7706. Rikka with Linkership2077#TL 0ms3776kbC++23866b2024-09-10 18:51:442024-09-10 18:51:44

Judging History

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

  • [2024-09-10 18:51:44]
  • 评测
  • 测评结果:TL
  • 用时:0ms
  • 内存:3776kb
  • [2024-09-10 18:51:44]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
int n,m,x[355],y[355];
bitset<18>res[18];
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<m;i++)
		x[i]=read()-1,y[i]=read()-1;
	int ans=n;
	for (int sta=0;sta<1<<n;sta++){
		if (__builtin_popcount(sta)>=ans) continue;
		for (int i=0;i<n;i++) res[i].reset();
		for (int i=0;i<m;i++)
			if (~sta>>x[i]&1)
				res[x[i]].set(y[i]);
		for (int k=0;k<n;k++)
			for (int i=0;i<n;i++) if (res[i][k])
				res[i]|=res[k];
		bool flag=0;
		for (int i=0;i<n;i++)
			for (int j=i+1;j<n;j++)
				if (res[i][j]&&res[j][i])
					flag=1;
		if (!flag) ans=__builtin_popcount(sta);
	}
	printf("%d\n",ans+n);
}
int main(){int T=read();while (T--) solve(); return 0;}

詳細信息

Test #1:

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

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: -100
Time Limit Exceeded

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:


result: