QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#64076#3996. RaceltunjicTL 150ms13040kbC++141.9kb2022-11-24 05:39:142022-11-24 05:39:16

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:39:16]
  • Judged
  • Verdict: TL
  • Time: 150ms
  • Memory: 13040kb
  • [2022-11-24 05:39:14]
  • 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[LOG];
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);
		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;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 4ms
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: 13000kb

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: 12892kb

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: 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: 13008kb

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: 12956kb

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: 1ms
memory: 12832kb

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: 150ms
memory: 13040kb

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: