CSES - Aalto Competitive Programming 2024 - wk12 - Wed - Results
Submission details
Task:3-Coloring
Sender:ilyas.ben
Submission time:2024-11-27 17:04:30 +0200
Language:Python3 (CPython3)
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.02 sdetails
#2ACCEPTED0.02 sdetails
#30.02 sdetails
#4ACCEPTED0.02 sdetails
#50.02 sdetails
#6ACCEPTED0.02 sdetails
#70.02 sdetails
#80.02 sdetails
#9ACCEPTED0.02 sdetails
#100.02 sdetails
#110.02 sdetails
#120.03 sdetails
#130.12 sdetails

Code

def three_coloring(n, edges):
    color = [-1] * n  # To store colors for nodes (1-based)
    visited = [False] * n  # To track visited nodes
    in_cycle = [False] * n  # To mark nodes that are part of a cycle

    def dfs(node):
        stack = []
        current = node
        while not visited[current]:
            visited[current] = True
            stack.append(current)
            current = edges[current] - 1  
        if current in stack:   
            cycle_start = stack.index(current)
            return stack[cycle_start:]  
        return []
 
    def color_cycle(cycle):
        for i, node in enumerate(cycle):
            color[node] = (i % 3) + 1  
            in_cycle[node] = True   

    
    for i in range(n):
        if not visited[i]:
            cycle = dfs(i)
            if cycle:
                color_cycle(cycle)

   
    for i in range(n):
        if color[i] == -1:  
            color[i] = (color[edges[i] - 1] % 3) + 1  

    print(" ".join(map(str, color)))

 
n = int(input())
edges = list(map(int, input().split()))
three_coloring(n, edges)

Test details

Test 1

Verdict: ACCEPTED

input
2
2 1 

correct output
1 2 

user output
1 2

Test 2

Verdict: ACCEPTED

input
3
2 1 1 

correct output
1 2 2 

user output
1 2 2

Test 3

Verdict:

input
4
3 1 4 2 

correct output
1 2 2 1 

user output
1 1 2 3

Test 4

Verdict: ACCEPTED

input
5
5 5 1 5 4 

correct output
1 1 2 1 2 

user output
2 2 3 2 1

Test 5

Verdict:

input
10
3 1 9 9 3 4 10 10 5 1 

correct output
1 2 2 2 3 1 1 1 1 2 

user output
2 3 1 3 3 1 3 3 2 3

Test 6

Verdict: ACCEPTED

input
10
9 10 4 3 9 1 1 4 2 6 

correct output
1 1 1 2 1 3 2 1 2 2 

user output
1 3 1 2 3 2 2 3 2 1

Test 7

Verdict:

input
10
3 8 4 5 10 8 5 10 4 6 

correct output
1 1 2 1 2 2 1 3 2 1 

user output
3 1 3 3 2 2 3 3 1 1

Test 8

Verdict:

input
10
9 1 10 3 9 4 6 9 3 5 

correct output
1 2 1 2 1 1 2 1 2 2 

user output
2 3 2 3 1 1 2 2 1 3

Test 9

Verdict: ACCEPTED

input
10
4 6 5 5 1 2 4 2 1 3 

correct output
1 1 1 2 3 2 1 2 2 2 

user output
1 1 1 2 3 2 3 2 2 2

Test 10

Verdict:

input
100
19 7 2 67 47 20 73 93 43 11 49...

correct output
1 1 2 1 1 1 3 2 1 2 1 1 2 1 1 ...

user output
3 3 2 3 3 1 1 1 3 2 1 2 1 3 2 ...

Test 11

Verdict:

input
1000
155 447 741 874 264 87 534 724...

correct output
1 1 2 1 1 1 1 1 1 1 1 2 1 2 2 ...

user output
3 3 3 3 3 3 3 3 3 3 3 3 3 2 3 ...

Test 12

Verdict:

input
10000
7778 6074 2376 8595 8243 8930 ...

correct output
1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 ...

user output
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ...

Test 13

Verdict:

input
100000
51396 92191 77318 65910 87045 ...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ...