QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#111553#4635. Graph OperationDualqwqWA 279ms3956kbC++142.0kb2023-06-07 16:03:052023-06-07 16:03:06

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-06-07 16:03:06]
  • 评测
  • 测评结果:WA
  • 用时:279ms
  • 内存:3956kb
  • [2023-06-07 16:03:05]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 5,M = N * N * 3;
typedef bitset<N> Set;
int n,m;
bitset<N> g[N],h[N];
struct OP{
	int a,b,c,d;
	OP(){}
	OP(const int &_a,const int &_b,const int &_c,const int &_d):
		a(_a),b(_b),c(_c),d(_d){}
};
vector<OP> opg,oph;
inline void Oper(int tp,int a,int b,int c,int d)
{
	// printf("Oper:%d %d %d %d\n",tp,a,b,c,d);
	if(tp == 0)
	{
		opg.emplace_back(a,b,c,d);
		g[a][b] = g[b][a] = g[c][d] = g[d][c] = 0;
		g[a][c] = g[c][a] = g[b][d] = g[d][b] = 1;
	}
	if(tp == 1)
	{
		oph.emplace_back(a,b,c,d);
		h[a][b] = h[b][a] = h[c][d] = h[d][c] = 0;
		h[a][c] = h[c][a] = h[b][d] = h[d][b] = 1;
	}
}
bool DoIt(int u)
{
	Set A = g[u],B = h[u];
	if(A == B) return false;
	Set C = A & (B.flip());B.flip();
	Set D = B & (A.flip());A.flip();
	// printf("pd:%d,%d\n",(int)D[0],(int)D[1]);
	int v = C._Find_first(),w = D._Find_first();
	// printf("Do:%d %d %d\n",u,v,w);
	Set P = g[w] & (g[v].flip());g[v].flip();
	Set Q = h[v] & (h[w].flip());h[w].flip();
	int tmp;
	while(P.any() && (tmp = P._Find_first(),tmp == u || tmp == v || tmp == w))
		P.reset(tmp);
	while(Q.any() && (tmp = Q._Find_first(),tmp == u || tmp == v || tmp == w))
		Q.reset(tmp);
	if(P.any()) {int t = P._Find_first();Oper(0,u,v,w,t);return true;}
	else {int t = Q._Find_first();Oper(1,u,w,v,t);return true;} 
	return false;
}
int main()
{
	cin >> n >> m;
	for(int i = 1;i <= m;i++)
	{
		int a,b;
		cin >> a >> b;
		g[a].set(b);g[b].set(a);
	}
	for(int i = 1;i <= m;i++)
	{
		int a,b;
		cin >> a >> b;
		h[a].set(b);h[b].set(a);
	}
	for(int i = 1;i <= n;i++) if(g[i].count() != h[i].count()) return puts("-1"),0;
	// DoIt(1);
	for(int i = 1;i <= n;i++)
		while(DoIt(i));
	printf("%d\n",opg.size() + oph.size());
	for(int i = 0;i < opg.size();i++)
		printf("%d %d %d %d\n",opg[i].a,opg[i].b,opg[i].c,opg[i].d);
	for(int i = (int)oph.size() - 1;i >= 0;i--)
		printf("%d %d %d %d\n",oph[i].a,oph[i].b,oph[i].c,oph[i].d);
	return 0;
}

详细

Test #1:

score: 100
Accepted
time: 2ms
memory: 3692kb

input:

4 2
1 2
3 4
1 3
2 4

output:

1
1 2 3 4

result:

ok n=4

Test #2:

score: 0
Accepted
time: 2ms
memory: 3700kb

input:

6 12
1 2
3 5
4 6
1 4
1 5
1 6
2 3
2 5
2 6
3 4
3 6
4 5
1 3
2 4
5 6
1 4
1 5
1 6
2 3
2 5
2 6
3 4
3 6
4 5

output:

2
1 2 3 4
3 5 4 6

result:

ok n=6

Test #3:

score: 0
Accepted
time: 1ms
memory: 3692kb

input:

4 0

output:

0

result:

ok n=4

Test #4:

score: 0
Accepted
time: 2ms
memory: 3596kb

input:

10 0

output:

0

result:

ok n=10

Test #5:

score: 0
Accepted
time: 0ms
memory: 3596kb

input:

100 0

output:

0

result:

ok n=100

Test #6:

score: 0
Accepted
time: 2ms
memory: 3600kb

input:

1000 0

output:

0

result:

ok n=1000

Test #7:

score: 0
Accepted
time: 2ms
memory: 3624kb

input:

4 6
4 1
1 2
1 3
4 3
3 2
4 2
4 1
4 2
4 3
3 2
1 3
1 2

output:

0

result:

ok n=4

Test #8:

score: 0
Accepted
time: 0ms
memory: 3700kb

input:

10 45
7 5
6 1
3 8
9 7
8 1
2 1
7 1
10 9
4 5
6 5
8 6
3 1
5 1
3 6
4 9
6 9
9 1
10 6
4 6
10 2
4 7
4 8
2 5
10 5
3 4
3 7
10 8
8 2
3 10
4 1
4 2
2 9
2 7
8 7
10 1
8 5
6 7
2 6
10 7
9 5
3 9
3 5
8 9
3 2
4 10
3 5
4 6
9 5
7 5
2 9
6 5
4 5
4 1
3 10
8 9
8 6
10 7
3 9
8 2
9 7
8 7
10 8
10 1
2 7
3 6
2 6
3 2
4 2
2 5
10 9
...

output:

0

result:

ok n=10

Test #9:

score: 0
Accepted
time: 4ms
memory: 3680kb

input:

100 4950
15 37
36 56
57 64
66 63
35 70
8 65
25 36
1 27
6 74
79 22
35 34
79 70
53 74
41 63
7 40
41 22
99 93
96 70
35 30
20 67
48 65
100 21
8 4
75 87
80 10
82 38
7 10
85 77
42 77
28 64
73 60
20 74
73 86
24 31
73 44
97 93
8 74
48 19
63 42
41 57
25 79
13 19
96 39
59 44
81 20
66 2
8 37
34 23
88 27
12 14
...

output:

0

result:

ok n=100

Test #10:

score: 0
Accepted
time: 276ms
memory: 3864kb

input:

1000 499500
90 844
735 814
874 452
191 64
745 192
489 653
998 227
104 125
296 644
285 190
831 763
70 776
981 126
213 964
306 137
199 965
849 5
717 70
329 305
196 836
909 527
222 367
323 554
384 900
496 797
620 860
18 823
929 135
589 207
947 354
461 271
22 914
456 403
263 362
908 870
30 384
995 996
3...

output:

0

result:

ok n=1000

Test #11:

score: 0
Accepted
time: 279ms
memory: 3956kb

input:

1000 499500
561 780
496 694
698 721
598 412
55 527
799 952
790 473
980 139
375 308
605 850
670 77
77 908
958 436
379 504
293 452
735 666
223 901
944 455
554 123
644 817
723 68
157 867
527 755
380 937
904 851
614 666
299 131
369 83
61 651
820 239
432 583
588 869
500 542
502 996
305 43
601 882
277 337...

output:

0

result:

ok n=1000

Test #12:

score: 0
Accepted
time: 2ms
memory: 3632kb

input:

4 6
4 3
1 3
2 3
4 2
4 1
2 1
2 3
4 1
4 2
4 3
2 1
1 3

output:

0

result:

ok n=4

Test #13:

score: 0
Accepted
time: 1ms
memory: 3672kb

input:

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

output:

0

result:

ok n=4

Test #14:

score: 0
Accepted
time: 2ms
memory: 3440kb

input:

10 21
2 10
8 4
4 9
10 4
6 10
8 9
3 5
7 9
10 5
2 1
2 8
3 10
6 1
10 7
6 7
4 1
3 4
5 1
8 1
2 5
5 7
3 4
3 9
5 8
2 4
2 5
3 1
10 1
3 5
6 1
6 2
3 6
6 8
3 10
2 9
2 8
3 7
6 7
5 7
2 10
5 4
10 5

output:

-1

result:

ok n=10

Test #15:

score: 0
Accepted
time: 2ms
memory: 3480kb

input:

10 3
2 8
2 10
2 9
2 5
2 6
2 7

output:

-1

result:

ok n=10

Test #16:

score: 0
Accepted
time: 0ms
memory: 3364kb

input:

10 33
2 4
2 6
8 1
5 1
7 1
6 1
6 10
3 6
8 2
3 4
5 10
8 9
7 10
2 10
4 1
3 8
4 10
1 9
4 9
8 10
6 4
2 7
1 10
10 9
2 9
2 1
8 4
6 7
4 7
7 9
5 9
6 9
5 6
4 10
1 9
5 2
6 4
2 1
5 7
7 10
2 7
5 10
8 9
6 9
10 9
7 1
3 6
4 1
2 10
7 9
8 2
2 9
3 2
2 4
6 7
1 10
5 8
4 7
3 9
6 10
3 10
8 10
8 4
6 1
8 6
4 9

output:

-1

result:

ok n=10

Test #17:

score: 0
Accepted
time: 2ms
memory: 3512kb

input:

100 149
97 53
14 62
97 60
14 58
85 69
14 63
97 99
14 71
97 88
85 47
14 61
14 43
97 44
97 17
14 39
85 17
20 99
97 73
85 31
85 67
85 12
14 24
14 69
14 96
97 76
97 95
97 11
85 79
85 19
85 70
85 6
14 56
14 12
85 98
85 53
85 76
85 26
20 37
97 35
97 70
20 96
97 82
97 34
85 94
14 46
97 54
97 43
97 4
85 2
8...

output:

-1

result:

ok n=100

Test #18:

score: 0
Accepted
time: 0ms
memory: 3480kb

input:

100 4631
2 12
66 70
81 62
5 66
94 2
92 64
62 96
58 39
34 3
21 96
52 15
23 67
62 29
38 18
72 56
67 50
81 70
38 42
81 68
99 22
61 42
30 71
32 93
46 95
27 72
97 37
27 2
46 73
65 2
94 22
33 11
64 73
44 5
48 13
65 16
24 44
61 15
34 71
40 1
60 87
100 66
84 33
81 7
14 69
57 83
63 79
23 96
34 15
72 41
47 12...

output:

-1

result:

ok n=100

Test #19:

score: 0
Accepted
time: 144ms
memory: 3652kb

input:

1000 261943
229 141
480 681
189 131
575 202
700 642
405 254
845 739
920 506
838 6
366 32
886 326
124 749
375 702
426 316
843 800
736 845
752 171
744 236
169 313
612 804
675 808
230 804
454 695
617 445
606 481
766 254
140 421
483 155
775 115
617 583
710 417
936 649
329 53
526 979
833 382
464 327
475 ...

output:

-1

result:

ok n=1000

Test #20:

score: 0
Accepted
time: 32ms
memory: 3668kb

input:

1000 48821
306 916
554 937
602 467
778 306
291 993
446 28
561 538
566 718
833 139
857 553
738 128
153 811
350 290
458 146
211 897
158 828
925 574
291 91
530 933
833 387
773 926
554 776
900 41
158 186
877 717
975 113
360 451
375 101
980 364
96 203
492 953
29 280
469 540
153 604
44 911
601 229
469 858...

output:

-1

result:

ok n=1000

Test #21:

score: 0
Accepted
time: 2ms
memory: 3612kb

input:

4 1
4 1
4 1

output:

0

result:

ok n=4

Test #22:

score: 0
Accepted
time: 2ms
memory: 3688kb

input:

6 5
6 3
5 6
2 6
2 3
6 4
6 5
6 4
6 2
2 3
6 3

output:

0

result:

ok n=6

Test #23:

score: 0
Accepted
time: 2ms
memory: 3408kb

input:

6 1
3 1
1 2

output:

-1

result:

ok n=6

Test #24:

score: -100
Wrong Answer
time: 2ms
memory: 3688kb

input:

10 34
7 2
8 10
10 9
6 1
6 5
2 4
6 4
2 5
7 4
2 3
9 4
1 5
6 3
2 1
3 4
4 5
3 5
8 4
7 6
8 1
6 9
10 5
10 4
7 9
3 9
2 9
3 1
1 4
10 6
8 2
8 7
6 2
9 5
1 9
6 2
4 9
4 2
7 8
2 10
4 10
4 8
4 1
2 1
4 7
6 9
6 1
5 8
4 6
1 3
9 7
6 3
9 10
2 5
4 5
6 8
9 5
5 7
2 3
1 10
2 9
4 3
2 8
3 10
1 5
9 1
6 7
6 5
9 3

output:

5
1 8 10 5
2 7 10 1
5 6 7 8
7 1 8 10
3 10 5 6

result:

wrong answer a and b must be adjacent!  round 5 : a,b,c,d = 3,10,5,6