๐Ÿคฆโ€โ™€๏ธ๋ฐฑ์ค€ 2606 (๋ฐ”์ด๋Ÿฌ์Šค/๊ทธ๋ž˜ํ”„)

๋ง์ฐจยท2022๋…„ 8์›” 8์ผ
0

๋ฐฑ์ค€

๋ชฉ๋ก ๋ณด๊ธฐ
21/34

https://www.acmicpc.net/problem/2606

๊ทธ๋ž˜ํ”„ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ž˜ ๋ชจ๋ฅธ๋‹ค. ๊ธ€์„ ๋ดค๋Š”๋ฐ ์ดํ•ด๊ฐ€ ์•ˆ๋˜๋Š” ๋ถ€๋ถ„๋“ค์ด ์žˆ์–ด์„œ ๋‚˜์˜ ๋ฉ˜ํƒˆ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์ผ๋‹จ ์ด ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ์œ„ํ•œ ์ง€์‹๋“ค๊นŒ์ง€๋งŒ ์ดํ•ดํ–ˆ๋‹ค.

๋ฌธ์ œ์ดํ•ด

์ผ๋‹จ 1๋ฒˆ์˜ ์ปดํ“จํ„ฐ๊ฐ€ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฐ์—ผ๋œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์ „์—ผ๋˜์–ด์„œ ์ด ๋ช‡ ๋Œ€์˜ ์ปดํ“จํ„ฐ๊ฐ€ ๊ฐ์—ผ๋˜๋Š” ์ง€ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.
์ €์ ˆ๋กœ
์ด๋Ÿฐ ๊ทธ๋ฆผ์ด ๋จธ๋ฆฌ์— ๊ทธ๋ ค์ง„๋‹ค.
1) ๊ทธ๋ž˜ํ”„๋ž€ ์ •์ ๊ณผ ๊ฐ„์„ ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค
2) ํ•ด๋‹น ๋ฌธ์ œ๋Š” ๋ฐฉํ–ฅ์„ฑ์ด ์—†๋‹ค.
๋ผ๋Š” ์‚ฌ์‹ค์„ ์ผ๋‹จ ์•Œ์•„๋‚ธ๋‹ค.

์ด์ œ ์ธ์ ‘ ํ–‰๋ ฌ๋กœ ์ƒ๊ฐํ•  ์ง€ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ์ƒ๊ฐํ•  ์ง€ ์ •ํ•ด์•ผ ํ•œ๋‹ค.
์ธ์ ‘ ํ–‰๋ ฌ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ถ”์ฒœํ•˜๋Š” ๊ฒฝ์šฐ๋Š” : ๊ฐ„์„ ์ด ์ •์ ^2์™€ ๊ฐ€๊นŒ์šธ ๋•Œ์ด๋‹ค.
์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ถ”์ฒœํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์œ„์˜ ๋ฐ˜๋Œ€์ด๋‹ค.
๋ฌธ์ œ์—์„œ ์ •์ ‘์€ 100๊นŒ์ง€ ์˜ฌ ์ˆ˜ ์žˆ๊ณ  ๊ฐ„์„ ์€ ๋”ฐ๋กœ ๋‚ด์šฉ์ด ์ฃผ์–ด์ง€์ง€ ์•Š์•˜๋‹ค.

๊ฐ„์ ‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ฐ์˜ ์ •์ ์ด ์ธ์ ‘๋˜์–ด ์žˆ๋Š” ์ •์ ์„ ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ฆฌ๋ฉด
1) 2, 5
2) 1, 3, 5
3) 2
4) 7
5) 1, 2, 6
6) 5
7) 4
์ด๋‹ค. ์ฃผ์–ด์ง„ ์˜ˆ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ’€์ดํ•˜์˜€๋‹ค.
1๋ฒˆ์€ 2๋ฒˆ 5๋ฒˆ๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.
๊ทธ๋Ÿผ ์šฐ์„ ์ ์œผ๋กœ 2๋ฒˆ์„ ๋“ค์–ด๊ฐ„๋‹ค. 2๋ฒˆ์€ ๋‹ค์‹œ 1, 3, 5์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค. 1์€ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค. 3๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.
3์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค. 3์€ 2์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค. 2๋Š” ์ด๋ฏธ countํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ์„ธ์ง€ ์•Š๋Š”๋‹ค. 3์ด ๋๋‚œ๋‹ค.
๋‹ค์‹œ 2๋กœ ๋Œ์•„๊ฐ„๋‹ค. ๊ทธ ๋‹ค์Œ์€ 5์ด๋‹ค.
5๋กœ ๋“ค์–ด๊ฐ„๋‹ค 1, 2 ๋ชจ๋‘ ์ด๋ฏธ count๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ธ์ง€ ์•Š๋Š”๋‹ค. 6์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค
6์œผ๋กœ ๋“ค์–ด์™”๋‹ค. 5๋Š” ์ด๋ฏธ ์„ธ์—ˆ๋‹ค ๋Œ์•„๊ฐ„๋‹ค
5๋กœ ๋Œ์•„์™”๋‹ค. ๋‹ค์‹œ 2๋กœ ๋Œ์•„๊ฐ„๋‹ค.
2๋กœ ๋Œ์•„์™”๋‹ค ๋‹ค์‹œ 1๋กœ ๋Œ์•„๊ฐ„๋‹ค
...
์žฌ๊ท€๊ฐ€ ๋ฐ˜๋ณต๋œ๋‹ค.

์ด๋ฅผ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค.
์ด๋•Œ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ณ„์‚ฐํ•ด๋ณด๋ฉด O(ve)์ธ ๊ฒƒ ๊ฐ™๋‹ค

code

#include <bits/stdc++.h>
using namespace std;
int cnt;
int visited[101];
vector<int> vec[101];

void    round(int n)
{
    cnt++;
    visited[n] = 1;

    for (int i = 0; i < vec[n].size(); i++)
    {
        if (!visited[vec[n][i]])
            round(vec[n][i]);
    }
}

int main(void)
{
    cin.tie(0);
    ios::sync_with_stdio(0);

    int v, e;
    cin >> v >> e;

    vec->resize(v + 1);

    while (e--)
    {
        int num1, num2;
        cin >> num1 >> num2;
        vec[num1].push_back(num2);
        vec[num2].push_back(num1);
    }

    round(1);
    cout << cnt - 1;
    return (0);
}

0๊ฐœ์˜ ๋Œ“๊ธ€