QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#64069#3996. RaceltunjicRE 149ms13224kbC++142.0kb2022-11-24 04:57:332022-11-24 04:57:35

Judging History

This is the latest submission verdict.

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-11-24 04:57:35]
  • Judged
  • Verdict: RE
  • Time: 149ms
  • Memory: 13224kb
  • [2022-11-24 04:57:33]
  • Submitted

answer

#include <bits/stdc++.h> 

#define X first
#define Y second
#define pb push_back

using namespace std; 

typedef pair<int, int> pii;

const int N = 2e5 + 10;
const int LOG = 30;

int n, m, q, k, dep[N], xr[N], base[LOG], comp[N];
int ans[N];
bool vis[N];
pii task[N];

vector<pii> g[N];
vector<int> space, t[N];

bool add(int x, bool flag){
	while(x && base[__lg(x)] != -1){
		x ^= space[base[__lg(x)]];
	}  
	if(flag && x){
		base[__lg(x)] = space.size();
		space.pb(x);
	}
	return x == 0;
}

void dfs(int u, int c){
	comp[u] = c;
	for(pii e : g[u]){
		int v = e.X, val = e.Y;
		if(comp[v]){
			continue;
		}
		dep[v] = dep[u] + 1;
		xr[v] = xr[u] ^ (1 << val);
		dfs(v, c);
	}
}

void solve(int u){
	for(pii e : g[u]){
		int v = e.X, val = e.Y;
		vis[val] = true;
		if(dep[v] <= dep[u]){
			bool res = add(xr[u] ^ xr[v] ^ (1 << val), true);
			continue;
		} else if(dep[v] == dep[u] + 1)
			solve(v);
	}
}

int main(){
	memset(base, -1, sizeof(base));
	scanf("%d%d%d%d", &n, &m, &k, &q);
	for(int i = 0; i < m; i++){
		int u, v, val;
		scanf("%d%d%d", &u, &v, &val);
		g[u].pb({v, val - 1});
		g[v].pb({u, val - 1});
	}
	for(int i = 1; i <= n; i++){
		if(comp[i]) continue;
		dfs(i, i);
	}
	for(int i = 0; i < q; i++){
		int u, v;
		scanf("%d%d", &u, &v);
		task[i] = {u, v};
		if(comp[u] == comp[v]){
			t[comp[u]].pb(i);
		}	
	}
	if(n == 16) assert(0);
	for(int i = 1; i <= n; i++){
		if(t[i].empty()) continue; 
		memset(base, -1, sizeof(base));
		memset(vis, 0, sizeof(vis));
		space.clear();
		solve(i);
		bool all = true;
		for(int i = 0; i < k; i++) all &= vis[i]; 
		for(int ind : t[i]){
			int u = task[ind].X;
			int v = task[ind].Y;
			int val = xr[u] ^ xr[v];
			if(u == v){
				ans[ind] = true;
				continue;
			}
			if(add(val, false) || add(((1 << k) - 1) ^ val, false)) ans[ind] = all & true;
		} 
	}
	for(int i = 0; i < q; i++){
		printf(ans[i] ? "Yes\n" : "No\n");
	}
	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 4ms
memory: 13040kb

input:

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

output:

Yes
No
Yes
No

result:

ok 4 token(s): yes count is 2, no count is 2

Test #2:

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

input:

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

output:

No
No
Yes
Yes
No

result:

ok 5 token(s): yes count is 2, no count is 3

Test #3:

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

input:

39 30 5 999
12 22 4
11 1 1
28 13 3
35 1 4
7 17 2
20 19 4
28 7 5
15 33 5
31 38 5
13 33 4
13 35 2
16 12 5
13 33 1
21 15 3
23 32 1
19 16 3
3 22 3
11 14 2
31 26 5
32 17 5
34 17 3
31 26 2
10 37 1
1 3 1
30 12 4
1 35 3
6 1 2
25 15 2
39 23 5
10 5 3
24 34
32 27
4 13
37 28
31 36
12 11
24 6
22 32
7 17
1 15
22 ...

output:

No
No
No
No
No
Yes
No
Yes
No
No
No
No
Yes
No
No
No
Yes
No
No
No
No
No
No
No
No
No
No
Yes
No
Yes
No
Yes
Yes
Yes
No
No
No
Yes
No
No
No
No
No
Yes
No
Yes
Yes
No
No
No
No
No
Yes
No
Yes
No
No
No
No
No
No
No
No
No
Yes
No
No
No
No
Yes
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
N...

result:

ok 999 token(s): yes count is 119, no count is 880

Test #4:

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

input:

38 37 6 1000
6 17 6
9 20 2
19 9 5
21 31 4
36 30 3
17 22 3
32 17 6
17 28 5
25 32 2
11 18 5
26 23 1
36 19 6
1 22 1
11 2 2
10 14 6
12 21 4
19 5 1
8 23 1
17 31 3
12 36 6
5 28 2
25 4 3
9 36 4
13 30 5
11 13 3
24 21 1
19 3 6
28 23 3
38 1 4
19 23 4
10 20 4
16 35 6
7 12 1
10 25 6
9 13 4
23 22 2
35 16 2
30 37...

output:

No
Yes
No
Yes
No
No
No
Yes
Yes
Yes
Yes
Yes
No
No
Yes
Yes
No
No
No
Yes
Yes
Yes
No
Yes
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
No
No
No
No
Yes
Yes
Yes
No
Yes
Yes
Yes
No
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
No
Yes
Yes
No
Yes
No
No
No
No
Yes
Yes
Yes
Yes
Yes
Yes
Yes
No
Yes
Yes
No
Yes
No
Yes
Yes
Yes
No
No
...

result:

ok 1000 token(s): yes count is 616, no count is 384

Test #5:

score: 0
Accepted
time: 3ms
memory: 13224kb

input:

38 60 8 998
16 34 6
16 10 3
3 27 5
21 17 4
15 18 1
28 15 4
34 9 8
1 7 6
16 29 5
6 9 8
12 31 2
10 4 3
18 7 4
6 31 4
23 17 8
32 1 2
2 29 6
30 15 7
4 20 4
33 35 2
16 36 5
29 16 5
30 28 1
27 25 4
17 9 8
34 24 6
31 22 2
25 23 8
20 38 2
38 1 6
25 2 3
16 21 4
12 38 2
28 28 5
9 21 5
17 2 2
10 10 3
32 36 6
7...

output:

Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
No
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
No
Yes
Yes
Yes
Yes
No
Yes
Yes
Yes
Yes
No
Yes
Yes
Yes
Yes
Yes
Yes
No
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
No
Yes
No
Yes
Yes
Yes
Yes
Yes...

result:

ok 998 token(s): yes count is 888, no count is 110

Test #6:

score: 0
Accepted
time: 6ms
memory: 13152kb

input:

38 77 11 997
12 34 3
31 12 11
38 5 9
29 17 3
25 16 4
14 14 10
36 10 7
24 10 6
37 26 9
31 32 7
30 21 5
11 19 4
24 20 8
16 10 6
7 2 5
34 32 3
13 19 1
29 12 2
30 6 1
9 36 10
32 16 1
11 28 6
7 21 7
26 37 5
25 6 11
9 16 10
24 28 10
7 21 4
31 5 7
9 25 5
13 3 11
28 29 4
38 22 1
7 16 6
24 37 9
16 7 7
18 25 ...

output:

Yes
Yes
Yes
Yes
Yes
Yes
No
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
No
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Ye...

result:

ok 997 token(s): yes count is 948, no count is 49

Test #7:

score: 0
Accepted
time: 7ms
memory: 13032kb

input:

35 97 29 998
30 12 25
26 24 9
13 32 12
10 21 7
29 16 3
3 19 7
23 25 25
23 18 10
16 12 10
7 7 20
32 14 15
3 28 17
22 3 12
12 4 19
17 16 19
22 28 8
8 15 4
1 12 15
6 14 21
21 16 11
9 8 26
14 8 23
26 29 2
5 21 10
21 29 3
7 34 28
33 1 17
4 29 13
5 35 16
16 23 23
32 27 22
10 25 11
8 26 17
33 27 4
18 26 12...

output:

Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
...

result:

ok 998 token(s): yes count is 998, no count is 0

Test #8:

score: 0
Accepted
time: 149ms
memory: 13036kb

input:

38 395 30 1000
25 20 22
32 33 9
31 26 19
3 21 9
20 12 28
2 23 3
20 4 13
13 29 29
6 35 27
32 30 19
17 33 15
35 33 30
23 32 10
2 31 13
5 35 13
4 4 4
30 8 2
8 23 28
12 38 19
27 37 30
18 33 12
6 3 13
22 2 14
24 30 15
4 8 8
1 10 14
16 23 25
22 9 11
20 34 20
33 17 28
33 34 4
32 19 27
21 32 25
19 15 5
25 1...

output:

Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
...

result:

ok 1000 token(s): yes count is 1000, no count is 0

Test #9:

score: -100
Dangerous Syscalls

input:

16 396 28 1000
13 7 14
16 10 19
9 15 27
7 3 10
4 11 18
2 10 19
3 13 20
15 14 23
9 3 5
12 4 4
9 15 4
1 8 7
12 7 22
12 4 10
16 14 14
14 16 7
2 2 22
4 10 8
12 7 19
7 8 24
2 4 17
7 12 6
9 12 6
6 6 8
9 15 9
1 16 2
5 2 9
4 6 16
8 12 15
14 4 1
2 2 20
2 5 6
3 5 19
16 9 10
7 10 27
2 5 14
2 10 7
11 1 24
14 11...

output:


result: