RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
R00229

안테나 신호 덮기

Gold II 골드 II
난이도
2.500s
시간 제한
256MB
메모리 제한
1
맞았습니다!!
1
제출 수
100.0%
정답률
레이팅

의견: 0

설명

도시에는 \(N\) 개의 구역이 \(1\) 번부터 \(N\) 번까지 있고, 설치 가능한 안테나가 \(M\) 개 있습니다. \(i\) 번 안테나는 어떤 구역들의 집합을 신호로 덮습니다.

\(M\) 개의 안테나 중 일부를 골라(아무것도 안 고를 수도 있음) 그들이 덮는 구역의 합집합이 정확히 전체 \(N\) 개 구역 전부가 되도록 하는 방법의 수를 구하세요. 안테나의 부분집합 자체가 다르면 다른 방법으로 셉니다.

답이 매우 클 수 있으므로 \(1\,000\,000\,007\) 로 나눈 나머지를 출력합니다. \(N \le 16\) 이므로 덮인 구역 집합을 비트마스크 상태로 두는 DP로 셀 수 있습니다.

제약
  • \(1 \le N \le 16\)
  • \(1 \le M \le 30\)
  • 각 안테나가 덮는 구역 번호는 서로 다르고 \(1\) 이상 \(N\) 이하입니다.
입력 형식

첫 줄에 구역 수 \(N\) 과 안테나 수 \(M\) 이 주어집니다.

이어서 \(M\) 개의 줄에 각 안테나가 주어집니다. 각 줄은 그 안테나가 덮는 구역의 개수 \(k\)\(k\) 개의 구역 번호로 이루어집니다.

출력 형식

전체 구역을 정확히 덮는 안테나 부분집합의 수를 \(1\,000\,000\,007\) 로 나눈 나머지를 출력합니다.

예제 1
입력
3 3
2 1 2
2 2 3
1 3
출력
3
설명

3개의 안테나로 1,2,3 영역을 모두 덮는 안테나 부분집합의 수를 셉니다. {1,2},{1,3},{1,2,3} 의 3가지가 전체를 덮습니다.

예제 2
입력
2 2
1 1
1 2
출력
1
설명

영역 1은 안테나 1만, 영역 2는 안테나 2만 덮으므로 두 안테나를 모두 골라야 합니다. 단 1가지입니다.

힌트

막혔나요? 코인으로 단계별 힌트를 잠금 해제하세요 — 첫 힌트는 가벼운 방향 제시, 뒤로 갈수록 더 많이 알려 줍니다. 문제를 풀면 모든 힌트가 무료로 공개됩니다.

문제 정보

riseoj 작성

출처 Original

평가 및 의견

안테나 신호 덮기

개요
출제자 난이도 Gold II 골드 II 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

안테나 신호 덮기

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8