Submission #5824363


Source Code Expand

#include <stdio.h>
#include <assert.h>
#include <fstream>
#include <iostream>
#include <algorithm>
#include <array>
#include <vector>
#include <queue>
#include <set>
#include <cmath>
//#include <unordered_map>
//#include <unordered_set>
//#include <boost/container/static_vector.hpp>
//#include <boost/unordered_set.hpp>
//#include <boost/unordered_map.hpp>
//#include <unistd.h>

class Union_Find {
    public:
    std::vector<int> par;
    Union_Find() {}
    Union_Find(int n){
        par.resize(n, 0);
        for(int i = 0; i < n; i++){
            par[i] = i;
        }
    }

    void simplify(int x) {
        std::vector<int> path;
        while (par[x] != x) {
            path.push_back(x);
            x = par[x];
        }
        for (int p : path) {
            par[p] = x;
        }
    }
    
    int find(int x){
        simplify(x);
        return par[x];
    }
    
    void unite(int x, int y){
        x = find(x);
        y = find(y);
        if (x != y) {
            par[y] = x;
            // 改造する時は「根になっているノードの親を変更する」という原則が守られていることに注意。
        }
    }
};

const int MAX = 100050;
const int MAX_N = 200050;
const int MAX_K = 100050;

int N, M;
int K[MAX];
std::vector<int> L[MAX];

Union_Find uf = Union_Find(MAX * 2);

int main(int argc, char **argv) {
    std::cin >> N >> M;

    int tmp;
    for (int i = 1; i <= N; i++) {
        std::cin >> K[i];
        for (int j = 1; j <= K[i]; j++) {
            std::cin >> tmp;
            L[i].push_back(tmp);
        }
    }

    for (int i = 1; i <= N; i++) {
        for (int j : L[i]) {
            uf.unite(i, N + j);
        }
    }

    for (int i = 1; i <= N; i++) {
        if (uf.find(i) != uf.find(1)) {
            std::cout << "NO" << std::endl;
            return 0;
        }
    }

    std::cout << "YES" << std::endl;

    return 0;
}

Submission Info

Submission Time
Task C - Interpretation
User critter
Language C++14 (GCC 5.4.1)
Score 400
Code Size 2003 Byte
Status AC
Exec Time 73 ms
Memory 7548 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 3 ms 3328 KB
01-02.txt AC 3 ms 3328 KB
01-03.txt AC 3 ms 3456 KB
01-04.txt AC 3 ms 3456 KB
01-05.txt AC 3 ms 3456 KB
01-06.txt AC 3 ms 3456 KB
01-07.txt AC 3 ms 3456 KB
01-08.txt AC 3 ms 3456 KB
01-09.txt AC 3 ms 3456 KB
01-10.txt AC 3 ms 3456 KB
02-01.txt AC 43 ms 4096 KB
02-02.txt AC 65 ms 6784 KB
02-03.txt AC 48 ms 4096 KB
02-04.txt AC 60 ms 5376 KB
02-05.txt AC 73 ms 6144 KB
02-06.txt AC 57 ms 5376 KB
02-07.txt AC 69 ms 6528 KB
02-08.txt AC 47 ms 7352 KB
02-09.txt AC 69 ms 7548 KB
02-10.txt AC 49 ms 5760 KB
02-11.txt AC 46 ms 5756 KB
02-12.txt AC 56 ms 5376 KB
02-13.txt AC 48 ms 5376 KB
sample-01.txt AC 3 ms 3328 KB
sample-02.txt AC 3 ms 3328 KB