Submission #7950290


Source Code Expand

#include <algorithm>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <limits>
#include <map>
#include <queue>
#include <set>
#include <tuple>
#include <vector>

using namespace std;

#define rep(i, n) for (int64_t i = 0; i < (n); i++)
#define irep(i, n) for (int64_t i = 0; i <= (n); i++)
#define rrep(i, n) for (int64_t i = (n)-1; i >= 0; i--)
#define rirep(i, n) for (int64_t i = n; i >= 0; i--)

class UFTree
{
    vector<int> parent;
    vector<int> height;
    vector<size_t> _size;

public:
    UFTree(int size)
    {
        for (int i = 0; i < size; i++)
        {
            parent.push_back(i);
            height.push_back(0);
            _size.push_back(1);
        }
    }
    int root(int node)
    {
        if (parent[node] == node)
        {
            return node;
        }
        return parent[node] = root(parent[node]);
    }
    void merge(int n0, int n1)
    {
        int r0 = root(n0), r1 = root(n1);
        if (r0 == r1)
        {
            return;
        }
        if (height[r0] < height[r1])
            swap(r0, r1);
        if (height[r0] == height[r1])
            height[r0]++;
        parent[r1] = r0;
        _size[r0] += _size[r1];
    }
    size_t size(int node)
    {
        return _size[root(node)];
    }
};

int main()
{
    int n, m;
    cin >> n >> m;

    UFTree uft(n + m);
    vector<bool> isUsed(m, false);

    rep(i, n)
    {
        int k;
        cin >> k;
        rep(j, k)
        {
            int lang;
            cin >> lang;
            uft.merge(i, n + lang - 1);
            isUsed[lang - 1] = true;
        }
    }

    int a = count(isUsed.begin(), isUsed.end(), true);
    if (uft.size(0) == n + a)
    {
        cout << "YES" << endl;
    }
    else
    {
        cout << "NO" << endl;
    }

    return 0;
}

Submission Info

Submission Time
Task C - Interpretation
User mk10
Language C++14 (GCC 5.4.1)
Score 400
Code Size 1892 Byte
Status AC
Exec Time 49 ms
Memory 3676 KB

Judge Result

Set Name sample dataset1 dataset2
Score / Max Score 0 / 0 200 / 200 200 / 200
Status
AC × 2
AC × 12
AC × 27
Set Name Test Cases
sample sample-01.txt, sample-02.txt
dataset1 sample-01.txt, sample-02.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt
dataset2 sample-01.txt, sample-02.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 02-11.txt, 02-12.txt, 02-13.txt, sample-01.txt, sample-02.txt
Case Name Status Exec Time Memory
01-01.txt AC 1 ms 256 KB
01-02.txt AC 1 ms 256 KB
01-03.txt AC 2 ms 256 KB
01-04.txt AC 2 ms 256 KB
01-05.txt AC 2 ms 256 KB
01-06.txt AC 2 ms 256 KB
01-07.txt AC 1 ms 256 KB
01-08.txt AC 2 ms 256 KB
01-09.txt AC 2 ms 256 KB
01-10.txt AC 2 ms 256 KB
02-01.txt AC 35 ms 2152 KB
02-02.txt AC 40 ms 2028 KB
02-03.txt AC 33 ms 1396 KB
02-04.txt AC 44 ms 3552 KB
02-05.txt AC 41 ms 2028 KB
02-06.txt AC 44 ms 3552 KB
02-07.txt AC 43 ms 2028 KB
02-08.txt AC 33 ms 2028 KB
02-09.txt AC 49 ms 3676 KB
02-10.txt AC 39 ms 2028 KB
02-11.txt AC 39 ms 2028 KB
02-12.txt AC 38 ms 2028 KB
02-13.txt AC 38 ms 2028 KB
sample-01.txt AC 1 ms 256 KB
sample-02.txt AC 1 ms 256 KB