Skip to main content
  1. Posts/
  2. Algorithm/

BOJ 4195 친구 네트워크

·132 words·1 min
Jiho Kim
Author
Jiho Kim
달려 또 달려

📝 문제 정보
#

🧐 관찰 및 접근
#

  • 누가 봐도 유니온파인드 스타일이다.
  • 문자열을 그대로 유니온 파인드에 넣긴 곤란하니, map 혹은 dict를 이용하자.
  • 유니온 파인드를 구현할 때, 합을 잘 구해줘야한다.
    • 분리 집합을 포레스트 모양이라고 생각할때, 각 트리의 루트노드에서 트리의 크기를 관리할 수 있도록 하면 쉽게 구현할 수 있다.

💻 풀이
#

  • 코드 (C++):
void solve(){
    int Q; cin >> Q;
    UF.init(Q*2);
    map<string, int> mp;
    while(Q--){
        string A, B; cin >> A >> B;
        int a, b;
        if(mp.find(A) == mp.end()) mp[A] = mp.size();
        if(mp.find(B) == mp.end()) mp[B] = mp.size();
        a = mp[A];
        b = mp[B];
        UF.merge(a, b);
        cout << UF.cnt[UF.find(a)] << "\n";
    }
}
🔒

구현 코드 잠금

아래 쿠팡 링크를 방문하시면 코드가 공개됩니다.
광고 수익이 블로그 운영에 도움이 됩니다 🙏

🛒 쿠팡 방문하고 코드 보기

방문 후 잠금이 자동으로 해제됩니다