QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#64075#3996. RaceltunjicTL 156ms13208kbC++142.0kb2022-11-24 05:36:512022-11-24 05:36:52

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 05:36:52]
  • Judged
  • Verdict: TL
  • Time: 156ms
  • Memory: 13208kb
  • [2022-11-24 05:36:51]
  • 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);
		}	
	}
	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);
		if(n == 16) break;
		bool all = true;
		for(int j = 0; j < k; j++) all &= vis[j]; 
		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: 2ms
memory: 13008kb

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: 2ms
memory: 13196kb

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: 2ms
memory: 13208kb

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: 8ms
memory: 13028kb

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: 4ms
memory: 13028kb

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: 2ms
memory: 13200kb

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: 4ms
memory: 13088kb

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: 156ms
memory: 13044kb

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

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: