algorithm

๋ฐฑ์ค€ 1953

rkawk 2024. 8. 1. 22:38

๋ฌธ์ œ

ํ’€์ด

๊ฒฐ๊ตญ ์ด๋ถ„๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“œ๋Š” ๋ฌธ์ œ๋‹ค.

 

5
1 3
1 5
2 1 4
1 3
1 2

์˜ ๊ฒฝ์šฐ๋ฅผ ์˜ˆ๋กœ ๋“ค์ž.

 

์‹ซ์–ดํ•˜๋Š” ๊ด€๊ณ„๋ฅผ ์œ ํ–ฅ๊ทธ๋ž˜ํ”„๋กœ ๊ทธ๋ฆฌ๋ฉด ์ด๋ ‡๊ฒŒ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ 1๋ฒˆ๋…ธ๋“œ๋ถ€ํ„ฐ ์ฒญํŒ€์— ๋“ค์–ด๊ฐ„๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ๊ทธ๋ ‡๊ฒŒ ๋œ๋‹ค๋ฉด 1๋ฒˆ ๋…ธ๋“œ๋Š” 3๋ฒˆ์„ ์‹ซ์–ดํ•˜๋ฏ€๋กœ 3๋ฒˆ์€ ๋ฌด์กฐ๊ฑด ๋ฐฑํŒ€์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

 

3๋ฒˆ์„ ๊ธฐ์ค€์œผ๋กœ 3๋ฒˆ๋…ธ๋“œ๋Š” 4๋ฒˆ์„ ์‹ซ์–ดํ•˜๋ฏ€๋กœ 4๋ฒˆ๋…ธ๋“œ๋Š” ์ฒญํŒ€์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

 

4๋ฒˆ๋…ธ๋“œ๋Š” ์‹ซ์–ดํ•˜๋Š” ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ, ๋‹ค์‹œ 2๋ฒˆ๋…ธ๋“œ๋ถ€ํ„ฐ ์ฒญํŒ€์— ๋„ฃ๊ณ  ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด

 

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„๊ฐ€ ๊ทธ๋ ค์ง€๊ฒŒ ๋œ๋‹ค.

 

์‹ซ์–ดํ•˜๋Š” ์‚ฌ๋žŒ์ด ํ•˜๋‚˜๋„ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ์—†์œผ๋ฏ€๋กœ, ํ•œ๋ช…๋งŒ ์‹ซ์–ดํ•˜๋Š”์‚ฌ๋žŒ์ด ํ•œ๋ช… ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ํƒ์ƒ‰์˜ ๊ธฐ์ค€์—์„œ ๊ฐ€์žฅ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ๋‹ค.

 

๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํ•œ๋ฒˆ์”ฉ๋งŒ ๋ฐฉ๋ฌธํ•˜๋ฉด ๋˜๋ฏ€๋กœ O(N)์ด๋‹ค.

 

#include <iostream>
#include <vector>
#include <queue>
using namespace std;
vector<vector<int> > v(101);
int n, vis[101], blue[101], white[101], bans, wans;

int main() {
    cin>>n;
    for(int i=1; i<=n; i++) {
        int a; cin>>a;
        while(a--) {
            int b; cin>>b;
            v[i].push_back(b);
        }
    }
    for(int i=1; i<=n; i++) {
        if(vis[i]) continue;
        vis[i] = 1;
        blue[i] = 1; bans += 1;
        queue<int>q;
        q.push(i);
        while(!q.empty()) {
            int cur = q.front(); q.pop();
            for(auto e : v[cur]) {
                if(vis[e]) continue;
                vis[e] = 1;
                if(blue[cur]) {
                    white[e] = 1;
                    wans += 1;
                }
                if(white[cur]) {
                    blue[e] = 1;
                    bans += 1;
                }
                q.push(e);
            }
        }

    }
    cout<<bans<<'\n';
    for(int i=1; i<=n; i++)
        if(blue[i]) cout<<i<<' ';
    cout<<'\n';
    cout<<wans<<'\n';
    for(int i=1; i<=n; i++)
        if(white[i]) cout<<i<<' ';

}

'algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋ฐฑ์ค€ 2671  (0) 2024.08.02
๋ฐฑ์ค€ 14848  (0) 2024.08.02
๋ฐฑ์ค€ 25690  (0) 2024.07.31
๋ฐฑ์ค€ 22953  (0) 2024.07.30
๋ฐฑ์ค€ 30704  (0) 2024.07.30