사용자 도구

사이트 도구


ps:problems:boj:20501

Facebook

ps
링크acmicpc.net/…
출처BOJ
문제 번호2051
문제명Facebook
레벨골드 2
분류

비트셋

시간복잡도O(qn/w)
인풋사이즈q<=500,000, n<=2000
사용한 언어Python 3.13
제출기록33432KB / 760ms
최고기록760ms
해결날짜2025/09/04

풀이

  • a,b가 주어졌을때 공통된 이웃을 그냥 세려면 O(N)이 걸리지만, 비트셋을 이용하면 O(N/w)로 단축시킬수 있다. 그래프에서 삼각형 세기에서도 설명한 방법이다. 이렇게 하면 총 시간복잡도는 O(QN/w)가 된다.
  • 입력을 비트셋으로 변환할때에는 그냥 입력 자체가 2진수라고 생각해서, 바로 int함수를 써서 변환하면 간단하다

코드

"""Solution code for "BOJ 20501. Facebook".

- Problem link: https://www.acmicpc.net/problem/20501
- Solution link: http://www.teferi.net/ps/problems/boj/20501

Tags: [bitset]
"""

import sys


def main():
    N = int(sys.stdin.readline())
    friends = [int(sys.stdin.readline(), 2) for _ in range(N)]
    Q = int(sys.stdin.readline())
    for _ in range(Q):
        a, b = [int(x) - 1 for x in sys.stdin.readline().split()]
        print((friends[a] & friends[b]).bit_count())


if __name__ == '__main__':
    main()

토론

댓글을 입력하세요:
F D U M H
 
ps/problems/boj/20501.txt · 마지막으로 수정됨: 2025/09/26 07:34 저자 teferi