trang chủ / bài tập / orientedge

Định hướng cạnh

Đề bài

Mô tả

Cho một đồ thị gồm n đỉnh và m cạnh. Mỗi cạnh có thể là cạnh có hướng hoặc cạnh vô hướng. Giữa một cặp đỉnh có thể có nhiều cạnh.

Cho trước một đỉnh s. Bạn cần lập hai phương án định hướng:

  1. Định hướng mỗi cạnh vô hướng theo một trong hai chiều sao cho số đỉnh đến được từ slớn nhất.
  2. Định hướng mỗi cạnh vô hướng theo một trong hai chiều sao cho số đỉnh đến được từ snhỏ nhất.

Trong cả hai phương án, mọi cạnh vô hướng đều phải được định hướng. Một cạnh có thể được định hướng khác nhau ở hai phương án. Đỉnh s luôn được tính là đến được từ chính nó.

Dữ liệu vào

  • Dòng đầu chứa ba số nguyên n, m, s — số đỉnh, số cạnh và đỉnh xuất phát.
  • m dòng tiếp theo, mỗi dòng chứa ba số nguyên ti, ui, vi. Nếu ti=1 thì cạnh là cạnh có hướng đi từ ui đến vi. Nếu ti=2 thì cạnh là cạnh vô hướng nối uivi.

Dữ liệu đảm bảo có ít nhất một cạnh vô hướng.

Dữ liệu ra

Hai dòng đầu mô tả phương án làm cực đại số đỉnh đến được, hai dòng sau mô tả phương án làm cực tiểu.

Mỗi phương án gồm:

  • Một dòng chứa số đỉnh đến được từ s theo phương án đó.
  • Một dòng chứa f ký tự '+' hoặc '-', với f là số cạnh vô hướng của đồ thị ban đầu. Ký tự thứ j là '+' nếu cạnh vô hướng thứ j, giả sử là (u,v), được định hướng từ u sang v, và là '-' nếu định hướng ngược lại. Các cạnh vô hướng được đánh số theo đúng thứ tự xuất hiện trong dữ liệu vào.

Nếu có nhiều đáp án, in ra một đáp án bất kỳ.

Ràng buộc

  • 2n3·105
  • 1m3·105
  • 1sn
  • 1ti2
  • 1ui,vin, uivi

Ví dụ

Input Output Giải thích
2 2 1
1 1 2
2 2 1
2
-
2
+
Cạnh có hướng 12 đã cho phép đi tới đỉnh 2, nên cả hai phương án đều đến được 2 đỉnh. Cạnh vô hướng duy nhất là (2,1): định hướng '-' nghĩa là 12, '+' nghĩa là 21.
6 6 3
2 2 6
1 4 5
2 3 4
1 4 1
1 3 1
2 2 3
6
++-
2
+-+
Ba cạnh vô hướng lần lượt là (2,6), (3,4), (2,3). Phương án cực đại "++-" cho 26, 34, 32, từ 3 đi được tới cả 6 đỉnh. Phương án cực tiểu chỉ dùng cạnh có hướng 31, và mọi cạnh vô hướng đều được hướng vào {1,3} nên chỉ đến được 2 đỉnh.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0