QOJ.ac

QOJ

Time Limit: 2 s Memory Limit: 2048 MB Total points: 100

#14327. Osadzenie w trzech wymiarach

Statistics

Osadzenie grafu w przestrzeni polega na umieszczeniu każdego wierzchołka w innym punkcie oraz narysowaniu każdej krawędzi jako prostego łuku łączącego jej dwa wierzchołki, tak aby żadne dwa łuki nie przecinały się poza wspólnym wierzchołkiem. W tym zadaniu rozważamy osadzenia w przestrzeni trójwymiarowej spełniające pewne warunki.

Dany jest prosty graf nieskierowany o $n$ wierzchołkach i $m$ krawędziach, czyli każdą parę wierzchołków łączy co najwyżej jedna krawędź, a każda krawędź łączy różne wierzchołki. Wierzchołki są ponumerowane od $1$ do $n$, a krawędzie od $1$ do $m$. Krawędź $j$ łączy różne wierzchołki $v_j$ i $w_j$. Każdy wierzchołek jest incydentny z co najwyżej pięcioma krawędziami.

Znajdź osadzenie grafu spełniające wszystkie poniższe warunki.

  • Każdy wierzchołek $i$ jest osadzony jako punkt $(x_i,y_i,0)$. Współrzędne $x_i,y_i$ muszą być liczbami całkowitymi od $0$ do $400$ włącznie. Wszystkie punkty muszą mieć różne współrzędne.

  • Każda krawędź $j$ jest osadzona jako łamana (połączony ciąg odcinków) o końcach w punktach osadzenia wierzchołków $v_j,w_j$. Każdy odcinek musi być równoległy do osi $x$, $y$ lub $z$. Każdy punkt łamanej musi mieć całkowite współrzędne od $0$ do $400$ włącznie. Każda łamana może mieć co najwyżej $30$ punktów, licząc końce.

  • Łamane nie mogą przecinać samych siebie. Różne łamane nie mogą dzielić żadnego punktu, chyba że odpowiadają krawędziom incydentnym z tym samym wierzchołkiem. W takim przypadku mogą dzielić tylko ten jeden koniec.

Wejście

Pierwszy wiersz wejścia zawiera dwie liczby całkowite $n,m$ ($2\le n\le1600$, $1\le m\le4000$). W $j$-tym z kolejnych $m$ wierszy są dwie liczby całkowite $v_j,w_j$ ($1\le v_j<w_j\le n$).

Wejście gwarantuje, że każdy wierzchołek jest incydentny z co najwyżej pięcioma krawędziami. Nie ma też krawędzi równoległych: jeśli $j\ne j^{\prime}$, zachodzi $(v_j,w_j)\ne(v_{j^{\prime}},w_{j^{\prime}})$.

Wyjście

Najpierw wypisz $n$ wierszy. W $i$-tym podaj dwie liczby całkowite $x_i,y_i$, określające pozycję osadzenia wierzchołka $i$. Następnie wypisz $m$ wierszy, gdzie $j$-ty reprezentuje łamaną odpowiadającą krawędzi $j$ w następującym formacie:

$$k\ x^{\prime}_1\ y^{\prime}_1\ z^{\prime}_1\ \cdots\ x^{\prime}_k\ y^{\prime}_k\ z^{\prime}_k$$

Tutaj $k$ oznacza liczbę punktów i musi być od $2$ do $30$ włącznie. Punkty $(x^{\prime}_1,y^{\prime}_1,z^{\prime}_1),\ldots,(x^{\prime}_k,y^{\prime}_k,z^{\prime}_k)$ są punktami łamanej. Pierwszy punkt $(x^{\prime}_1,y^{\prime}_1,z^{\prime}_1)$ musi być równy $(x_{v_j},y_{v_j},0)$, a ostatni $(x^{\prime}_k,y^{\prime}_k,z^{\prime}_k)$ musi być równy $(x_{w_j},y_{w_j},0)$. Każdą parę kolejnych punktów łączy odcinek tworzący łamaną. Każdy odcinek musi mieć dodatnią długość. Dwa kolejne odcinki mogą mieć tę samą orientację, na przykład oba być równoległe do osi $x$.

Wypisane osadzenie musi spełniać wszystkie warunki wymienione powyżej.

Przy podanych ograniczeniach wejścia można wykazać, że istnieje przynajmniej jedno poprawne wyjście. Jeśli istnieje wiele rozwiązań, każde z nich zostanie zaakceptowane.

Uwagi

Uwagi dotyczące specjalnego sprawdzania:

Otrzymujesz narzędzie wiersza poleceń do lokalnych testów. Plik można pobrać z DOMjudge. Na początku narzędzia znajdują się komentarze wyjaśniające jego użycie.

Przykład

Wejście 1

3 3
1 2
1 3
2 3

Wyjście 1

0 0
400 0
0 399
3 0 0 0 100 0 0 400 0 0
4 0 0 0 0 0 200 0 399 200 0 399 0
3 400 0 0 400 399 0 0 399 0

Uwagi

Objaśnienie przykładowego wejścia/wyjścia 1

Rysunek B.1 przedstawia osadzenie reprezentowane przez przykładowe wyjście.

problem_14327_ff3a6b5009066c45d519415ba83d83d8.png

Rysunek B.1: ilustracja osadzenia.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.