QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#64071#3996. RaceltunjicTL 156ms13220kbC++141.9kb2022-11-24 05:10:102022-11-24 05:10:12

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:10:12]
  • Judged
  • Verdict: TL
  • Time: 156ms
  • Memory: 13220kb
  • [2022-11-24 05:10:10]
  • 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);
		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: 10ms
memory: 13128kb

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

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

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

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

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

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

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

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: