도시 건설
시간 제한3초메모리 제한1024 MB
각 이동에서 새로 짓는 벽의 길이가 m을 넘지 않도록 정착지를 차지하는 순서가 있는지 판별합니다.
문제
최근 당신은 "Build a City"라는 게임에 빠지게 되었다.
이 게임은 2차원 지도에서 진행된다. 지도에는 0부터 까지 번호가 붙은 개의 인간 정착지가 있으며, 정착지 의 좌표는 ()이다. 정착지 0은 원점에 있으므로 이다.
당신의 도시는 좌표축에 평행한 변을 가진 벽으로 이루어진 직사각형이다. 정착지가 직사각형 안이나 경계 위에 있으면 도시가 그 정착지를 포함한다고 한다.
처음에 도시는 정착지 0을 포함하며, 원점에 있는 퇴화된 직사각형이다. 한 번의 이동에서 아직 점유되지 않은 정착지 하나를 얻고, 벽을 세워 그 정착지를 도시 안에 넣는다. 새 도시는 기존 도시가 포함하던 영역과 새로 얻은 정착지를 모두 포함하는 가장 작은 좌표축 평행 직사각형이다. 목표는 모든 정착지를 도시 안에 넣는 것이다.
도시 인프라 부서는 한 번의 이동에서 총 길이가 이하인 벽만 세울 수 있다. 기존 벽은 재사용할 수 있지만, 다른 곳에 놓을 수는 없다. 따라서 한 번의 이동에서 세우는 벽의 길이는 새 직사각형의 둘레에서 기존 직사각형과 새 직사각형의 겹치는 부분 길이를 뺀 값이다. 새로 얻은 정착지가 이미 도시 안에 있으면 세우는 벽의 길이는 0이다.
이제 모든 정착지를 얻는 순서가 존재하는지 알고 싶다. 각 이동에서 세우는 벽의 총 길이가 을 넘지 않아야 한다.
입력
입력의 첫 줄에는 테스트 케이스의 수 ()가 주어진다. 각 테스트 케이스는 다음과 같다.
첫 줄에 아직 점유되지 않은 정착지의 수 과 한 번의 이동에서 세울 수 있는 벽의 총 길이의 최댓값 이 주어진다 (, ).
이어지는 개의 줄 중 번째 줄에는 정착지 의 좌표 와 가 주어진다 ().
모든 테스트 케이스의 을 합하면 을 넘지 않는다.
출력
각 테스트 케이스마다 그러한 순서가 존재하면 Yes, 존재하지 않으면 No를 한 줄에 출력한다.