| Task: | Building Teams |
| Sender: | aalto26bm_006 |
| Submission time: | 2026-09-07 16:35:01 +0300 |
| Language: | Rust (2021) |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | details |
| #2 | ACCEPTED | 0.00 s | details |
| #3 | ACCEPTED | 0.00 s | details |
| #4 | ACCEPTED | 0.00 s | details |
| #5 | ACCEPTED | 0.00 s | details |
| #6 | ACCEPTED | 0.10 s | details |
| #7 | ACCEPTED | 0.10 s | details |
| #8 | ACCEPTED | 0.10 s | details |
| #9 | ACCEPTED | 0.10 s | details |
| #10 | ACCEPTED | 0.07 s | details |
| #11 | ACCEPTED | 0.00 s | details |
| #12 | ACCEPTED | 0.00 s | details |
Code
#![allow(unused)]
use std::{collections::VecDeque, io, process::exit};
fn create_neighbors(roads: &usize, cities: &usize) -> Vec<Vec<usize>> {
let mut matrix: Vec<Vec<usize>> = vec![Vec::new(); *cities];
for _ in 0..*roads {
let (start, end) = take_tuple();
matrix[start - 1].push(end - 1);
matrix[end - 1].push(start - 1);
}
matrix
}
fn bfs(num_nodes: &usize, root: usize, adjacent: &[Vec<usize>], visited: &mut [bool], colors: &mut [usize]) -> usize {
let mut queue: VecDeque<usize> = VecDeque::with_capacity(*num_nodes);
let mut last: usize = root;
queue.push_back(root);
visited[root] = true;
while !queue.is_empty() {
let current: usize = queue.pop_front().unwrap();
let current_color = colors[current];
for i in adjacent[current].iter() {
let neighbor = *i;
if visited[neighbor] {
if current_color == colors[neighbor] {
println!("IMPOSSIBLE");
exit(0);
}
continue;
}
visited[neighbor] = true;
queue.push_back(neighbor);
last = neighbor;
if current_color == 1 {
colors[neighbor] = 2;
} else {
colors[neighbor] = 1;
}
}
}
last
}
fn take_tuple() -> (usize, usize) {
let mut input = String::new();
io::stdin().read_line(&mut input).unwrap();
let mut it = input.trim().split_whitespace().map(|x| x.parse::<usize>().unwrap());
(it.next().unwrap(), it.next().unwrap())
}
fn main() {
let (num_nodes, num_edges) = take_tuple();
let mut visited: Vec<bool> = vec![false; num_nodes];
let mut colors: Vec<usize> = vec![0; num_nodes];
let mut adjacent: Vec<Vec<usize>> = create_neighbors(&num_edges, &num_nodes);
// first call
colors[0] = 1;
let mut last = bfs(&num_nodes, 0, &adjacent, &mut visited, &mut colors);
let mut next: usize = 0;
let mut missing: Vec<(usize, usize)> = Vec::new();
for i in 0..num_nodes {
if !visited[i] {
colors[i] = 1;
missing.push((last+1, i+1));
last = bfs(&num_nodes, i, &adjacent, &mut visited, &mut colors);
}
}
for color in colors.iter() {
print!("{} ", color);
}
}
Test details
Test 1
Verdict: ACCEPTED
| input |
|---|
| 10 20 3 4 8 10 3 7 1 8 ... |
| correct output |
|---|
| 1 1 1 2 2 1 2 2 2 1 |
| user output |
|---|
| 1 1 1 2 2 1 2 2 2 1 |
Test 2
Verdict: ACCEPTED
| input |
|---|
| 10 20 1 3 8 10 2 4 6 8 ... |
| correct output |
|---|
| 1 1 2 2 1 1 1 2 1 1 |
| user output |
|---|
| 1 1 2 2 1 1 1 2 1 1 |
Test 3
Verdict: ACCEPTED
| input |
|---|
| 10 20 7 10 3 10 9 10 2 10 ... |
| correct output |
|---|
| 1 2 2 1 1 1 2 1 2 1 |
| user output |
|---|
| 1 2 2 1 1 1 2 1 2 1 |
Test 4
Verdict: ACCEPTED
| input |
|---|
| 10 20 2 4 2 10 7 10 4 6 ... |
| correct output |
|---|
| 1 2 1 1 2 2 2 1 2 1 |
| user output |
|---|
| 1 2 1 1 2 2 2 1 2 1 |
Test 5
Verdict: ACCEPTED
| input |
|---|
| 10 20 3 5 8 10 9 10 1 8 ... |
| correct output |
|---|
| IMPOSSIBLE |
| user output |
|---|
| IMPOSSIBLE |
Test 6
Verdict: ACCEPTED
| input |
|---|
| 100000 200000 47355 96505 90709 92058 735 80715 91802 94265 ... |
| correct output |
|---|
| 1 2 2 1 2 1 1 1 2 2 1 2 1 1 1 ... |
| user output |
|---|
| 1 2 2 1 2 1 1 1 2 2 1 2 1 1 1 ... |
Test 7
Verdict: ACCEPTED
| input |
|---|
| 100000 200000 59991 95794 95150 96051 78453 94730 90411 95523 ... |
| correct output |
|---|
| 1 1 1 2 2 1 1 2 1 2 1 2 2 2 1 ... |
| user output |
|---|
| 1 1 1 2 2 1 1 2 1 2 1 2 2 2 1 ... |
Test 8
Verdict: ACCEPTED
| input |
|---|
| 100000 200000 89827 96402 65137 86792 80965 94708 19479 48078 ... |
| correct output |
|---|
| 1 2 1 1 2 1 2 2 2 1 2 1 1 2 1 ... |
| user output |
|---|
| 1 2 1 1 2 1 2 2 2 1 2 1 1 2 1 ... |
Test 9
Verdict: ACCEPTED
| input |
|---|
| 100000 200000 72952 83723 66197 70052 2949 52160 55753 95651 ... |
| correct output |
|---|
| 1 1 2 2 2 1 1 2 2 2 2 2 1 2 1 ... |
| user output |
|---|
| 1 1 2 2 2 1 1 2 2 2 2 2 1 2 1 ... |
Test 10
Verdict: ACCEPTED
| input |
|---|
| 100000 200000 38942 96755 70049 82663 7746 72732 87819 99029 ... |
| correct output |
|---|
| IMPOSSIBLE |
| user output |
|---|
| IMPOSSIBLE |
Test 11
Verdict: ACCEPTED
| input |
|---|
| 5 4 1 2 3 4 4 5 5 3 |
| correct output |
|---|
| IMPOSSIBLE |
| user output |
|---|
| IMPOSSIBLE |
Test 12
Verdict: ACCEPTED
| input |
|---|
| 4 5 1 2 1 4 2 3 2 4 ... |
| correct output |
|---|
| IMPOSSIBLE |
| user output |
|---|
| IMPOSSIBLE |
