QOJ.ac

QOJ

Limite de temps : 1.0 s Limite de mémoire : 1024 MB Points totaux : 100 Hackable ✓

#17893. 슈퍼브 다트

Statistiques

주식회사 슈퍼브에이아이 구성원들은 커피값 내기를 하기 위하여 슈퍼브 다트라는 새로운 게임을 만들었다. 슈퍼브 다트의 규칙은 아래와 같다.

  • 2차원 평면 위에 다트판을 그린다.

  • 다트판은 정수 좌표를 가지는 점들을 정점으로 하고 그 사이를 잇는 선분들을 간선으로 하여 만들어지는 그래프이다.

    • 서로 다른 정점의 좌표가 같은 경우는 없다.
    • 만들어지는 그래프는 단순 그래프(중복 간선이 없음)이며 연결 그래프(임의의 두 정점 사이의 경로가 항상 존재)이어야 한다.
    • 서로 다른 선분끼리는 교차하지 않으며 접한다 하더라도 두 선분이 정점을 공유하는 경우에 그 점에서만 접할 수 있다 (평면 그래프를 생각하면 이해가 쉽다.)
  • 이러한 다트판 위에 다트를 던진다고 할때, 한 번의 시행으로 얻게 되는 점수는 다트가 꽂힌 점이 포함되는 영역의 넓이에 반비례한다.

    • 다트판에서 어떤 점을 포함하는 영역이란 그 점에서 다트판의 간선들과 교차하거나 접하지 않는 경로로 연결할 수 있는 점들의 집합이다 (여기서의 경로란 그래프상의 경로가 아닌 평면상에서의 경로를 의미한다. 이는 곡선이 될 수도 있다.)
    • 넓이가 무한하거나 0인(다트판의 밖 혹은 꼭짓점이나 간선 바로 위에 꽂혔을때) 경우는 영역으로 치지 않으며 0점을 얻게 된다.

호기심이 많은 슈퍼브에이아이 구성원들은 이러한 다트판에서 나올 수 있는 점수들의 조합이 궁금해졌다. 이 궁금증을 해결하기 위해 우선 다트판이 주어졌을때 다트판에 있는 영역의 넓이들을 계산해보려고 한다.

Input

첫 번째 줄에 다트판의 정점의 개수와 간선의 개수 $N, M$ ($1 \le N, M \le 100\,000$) 이 주어진다. 각 정점에는 1부터 $N$까지, 각 간선에는 1부터 $M$까지 순서대로 번호가 붙어 있다.

다음 $N$개의 줄에는 정점들의 좌표가 주어진다. 이 중 $i$번째 줄에는 $i$번 정점의 $x$좌표, $y$좌표가 띄어쓰기로 구분되어 주어진다. 중복된 좌표는 주어지지 않는다. ($-10^6 \le x, y \le 10^6$)

다음 $M$개의 줄에는 다트판의 간선이 주어진다. 이 중 $i$번째 줄에는 $i$번 간선의 양 끝점 $s, e$ 가 주어진다. 양 끝점은 서로 다르며, 임의의 서로 다른 두 간선은 같은 쌍을 잇지 않으며, 최대 하나의 교차점을 가진다. 임의의 서로 다른 두 간선이 하나의 교차점을 가질 경우, 두 간선은 서로 공유하는 양 끝점을 가지며, 두 간선의 교차점은 바로 그 공유된 양 끝점이다. ($1 \le s, e \le N, s \neq e$)

주어진 다트판은 연결되어 있음이 보장된다.

Output

첫 번째 줄에 다트판에 있는 유효한 영역(넓이가 0보다 크고 유한한 경우)의 개수 $S$를 출력한다.

다음 $S$개의 줄에, 해당 영역들의 넓이를 소수점 둘째 자리에서 반올림하여 오름차순으로 출력하라.

Examples

Input 1

5 6
0 0
0 1
0 3
1 1
1 3
1 2
2 3
1 4
2 4
4 5
3 5

Output 1

2
0.5
2.0

Input 2

10 13
2 0
6 4
8 6
2 6
4 2
8 2
0 2
10 2
12 2
12 6
3 2
1 7
10 8
3 6
5 6
2 6
9 10
4 7
6 8
8 9
4 5
1 5
3 4

Output 2

4
4.0
4.0
12.0
16.0

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.