질문드립니다.

  • yeonzzg
    yeonzzg

    acm을 준비하면서 모르는것만 쌓여가고 물어볼 곳은 마땅히 없고.. 해서 계속 이곳에 도움을 요청하게 되네요..ㅠㅠ

    문제링크: D번
    http://neerc.ifmo.ru/past/2007/northern/problems.pdf
    해설:
    n(<=1000)의 노드에 m(<=10000)개의 간선이 있는 weighted 양방향 그래프에서 mst를 구하려고 합니다. 단, 두 종류의 길이와 단위 코스트가 주어지는 막대가 주어집니다. 각 엣지를 두 종류중 하나로 바꿔야 하며, 두 종류를 잘라 합쳐서 한 엣지를 만드는 경우는 불가능 합니다. 가능한 spanning tree중 최소 코스트를 구하세요.
    불가능한 경우도 존재합니다.

    제한:
    각 간선의 weight: 0<= l <= 100
    종류1 막대의 길이: 1<= q5 <= 10000
    종류1 막대의 단위코스트: 1<= p5 <= 10000
    종류2 막대의 길이: 1<= q6 <= 10000
    종류2 막대의 단위코스트: 1<= p6 <= 10000

    억쎕을 받기는 했는데 단순히 직감과 가정만 가지고 풀어서 이렇게 질문드립니다. 가정을 2가지로 하고 풀었는데요,

    1. 최적해는 항상 기본 mst에서 만들어진다.
    2. 모든 mst의 엣지 구성은 똑같을 것이다..(이건 솔직히 말도 안되는거같은데 ㅠㅠ)

    라고 생각하고 크루스컬로 구한 mst의 엣지 가지고 냅색을 돌려 해를 찾았더니 억쏍이 뜨더라구요..

    mst에 관한 아는건 그저 그리디한 성질을 만족한다 정도 뿐이라..ㅠ
    저 2가지 가정이 항상 옳은건가요?.?


    11년 전
15개의 댓글이 있습니다.
  • yeonzzg
    yeonzzg

    스포일러에 질문이 담겨있어요


    11년 전 link
  • hyunhwan
    hyunhwan

    완전 그래프에서 모든 edge의 가중치가 같을 경우엔 MST가 여럿 나올 수 있겠죠?


    11년 전 link
  • hyunhwan
    hyunhwan

    대회 사이트에서 찾아본 해법을 찾아보니 다음과 같았습니다. 맞게 접근 하신 것 같은데요?

    1. MST를 구한다.
    2. 가격이 싼 종류로 최대한 많이 edge를 커버, 이때 knap-sack algorithm 사용.
    3. 2 단계에서 사용 되지 못한 edge는 비싼 종류로 커버.


    11년 전 link
  • hyunhwan
    hyunhwan

    근데 spoiler의 1, 2의 차이는 잘 모르겠습니다. 같은 이야기 아닌가요?


    11년 전 link
  • Kureyo
    Kureyo

    해를 구성하는 트리의 T의 형태가 mst가 아닐때,
    어떤 e_i가 존재해서 T에 e_i를 추가하면, 생기는 사이클 중
    가장 큰 edge를 e_j라 하면 Len(e_j)>Len(e_i)인 i j 조합쌍이
    최소한 하나는 존재할 것인데,
    e_j를 구성했던 성분을 전부 e_i로 옮기면 항상 해가 더
    좋아지므로 기본 구조로 mst를사용하지 않은 해는 항상
    최적해가 아니다라고 말할수 있을거같은데요..
    그리고 그것의 대우명제는 스포일러 1.이죵..


    11년 전 link
  • Kureyo
    Kureyo

    LIBe/ 스포일러2는 어떤 mst를 구성하든 에지들의 길이의 집합은 같은게 아니냐는 말씀이신거같은데... 아닌가 아무튼 저도 잘 모르겠네여 @_@


    11년 전 link
  • Kureyo
    Kureyo


    이런 형태면 크루스칼은 1 2 5 를 택할텐데
    p1,p2의 길이가 각각 4라면 구성에 실패할거고
    1 3 4를 구성해서 p1(1+3) p2(4)로 구성해야 될거같은데
    제가 문제를 제대로 이해한게 맞나모르겠네요


    11년 전 link
  • Kureyo
    Kureyo

    그림이 링크 안되나...
    +-2-+
    | /|
    4 1 3
    |/ |
    +-5-+
    이런 형태입니다


    11년 전 link
  • yeonzzg
    yeonzzg

    네.. 2번 질문을 정확히 쓰질 않았네요 엣지 번호의 구성이 동일할것이라는 가정이 아니라 엣지 길이들의 구성이 동일할 것이다라는 가정이었습니다. 크루스컬의 경우 어차피 소트해서 구해나가니 당연히 항상 같겠지만 프림으로 구해나가면 얼마든지 달라질수있을거라(?) 생각이 불현듯 들어서요 ㅠㅠ


    11년 전 link
  • yeonzzg
    yeonzzg

    헉 저 그림 반례는 뭘까요.. 왜 억쎕이 떳죠? 아무래도 풀이가 틀린거같은데ㅠㅠ


    11년 전 link
  • yeonzzg
    yeonzzg

    아.. 생각해보니 크루스컬의 경우는 같은 엠에스티중 엣지가 가장 작은것들을 무조건 포함하면서 mst를 구성하므로 mst 알고리즘중 크루스컬만이 정해를 뱉어내겠네요 p5 p6로 나눌때 더 가격이 작은 놈이 최대가 구성이 되려면 엣지 길이가 작은놈들이 많을수록 유리하니까요. 라는 느낌이 또 드네요 ㅋ.ㅋ;


    11년 전 link
  • yeonzzg
    yeonzzg

    근데도 일단 저 반례는 해결이 안되는데.. 하 어렵네요..


    11년 전 link
  • yeonzzg
    yeonzzg

    1번은 Kureyo님이 명쾌하게 설명해주셨네요 ㅜㅜ 1번도 딱히 반례가 떠오르질 않아 그냥 저렇게 생각했던거인데.. 감사합니다!


    11년 전 link
  • yeonzzg
    yeonzzg

    아 저 그림 1 2 3이 mst 아닌가요?; ㅠㅠ


    11년 전 link
  • Kureyo
    Kureyo

    헉 그렇군욬ㅋㅋ죄송합니다ㅠㅠ


    11년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.