Submission #992444


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

#define DUMP(x) cerr << #x << "=" << x << endl
#define DUMP2(x, y) cerr<<"("<<#x<<", "<<#y<<") = ("<<x<<", "<<y<<")"<< endl
#define BINARY(x) static_cast<bitset<16> >(x)

#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define REP(i,m,n) for (int i=m;i<(int)(n);i++)

#define in_range(x, y, w, h) (0<=(int)(x) && (int)(x)<(int)(w) && 0<=(int)(y) && (int)(y)<(int)(h))
#define ALL(a) (a).begin(),(a).end()

typedef long long ll;
const int INF = 1e9;
typedef pair<int, int> PII;
int dx[4]={0, -1, 1, 0}, dy[4]={-1, 0, 0, 1};

const int MAX_N = 100000;
class UnionFind {
private:
    int union_size[MAX_N];
    int rank[MAX_N];

public:
    int par[MAX_N];
    
    void init(int n)
    {
        for (int i=0; i<n; i++) {
            par[i]=i;
            rank[i]=0;
            union_size[i] = 1;
        }
    }
    
    // 木の根を求める
    int find(int x)
    {
        if (par[x] == x) {
            return x;
        } else {
            return par[x] = find(par[x]);
        }
    }
    
    // xとyの属する集合を併合する
    void merge(int x, int y)
    {
        x = find(x);
        y = find(y);
        if (x == y) return;

        union_size[x] += union_size[y];
        union_size[y] = union_size[x];

        if (rank[x] < rank[y]) {
            par[x] = y;
        } else {
            par[y] = x;
            if (rank[x] == rank[y]) rank[x]++;
        }
    }
    
    // xとyが同じ集合に属するか判定する
    bool same(int x, int y)
    {
        return find(x) == find(y);
    }
    
    // x が含まれる集合の要素数を返す
    int getUnionSize(int x)
    {
        return union_size[find(x)];
    }
};

int main()
{
    ios::sync_with_stdio(false);

    map<int, set<int>> can;

    int N, M;
    cin >> N >> M;
    rep(i, N) {
        int K; cin >> K;
        rep(j, K) {
            int L;
            cin >> L;
            L--;
            can[L].insert(i);
        }
    }

    UnionFind UF;
    UF.init(N);

    rep(i, M) {
        if (can[i].size() == 0) continue;
        for (auto u : can[i]) {
            UF.merge(i, u);
        }
    }

    cout << (UF.getUnionSize(0) == N ? "YES" : "NO") << endl;
}

Submission Info

Submission Time
Task C - Interpretation
User OUDON
Language C++14 (GCC 5.4.1)
Score 0
Code Size 2220 Byte
Status WA
Exec Time 657 ms
Memory 15488 KB

Judge Result

Set Name sample dataset1 dataset2
Score / Max Score 0 / 0 0 / 200 0 / 200
Status
AC × 2
AC × 10
WA × 2
AC × 15
WA × 7
RE × 3
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
Case Name Status Exec Time Memory
01-01.txt AC 3 ms 256 KB
01-02.txt AC 3 ms 384 KB
01-03.txt AC 3 ms 384 KB
01-04.txt AC 3 ms 384 KB
01-05.txt WA 3 ms 384 KB
01-06.txt AC 3 ms 384 KB
01-07.txt AC 3 ms 384 KB
01-08.txt WA 3 ms 384 KB
01-09.txt AC 3 ms 384 KB
01-10.txt AC 3 ms 384 KB
02-01.txt RE 657 ms 14720 KB
02-02.txt WA 56 ms 6144 KB
02-03.txt WA 64 ms 9984 KB
02-04.txt RE 186 ms 15104 KB
02-05.txt AC 59 ms 6784 KB
02-06.txt RE 184 ms 15104 KB
02-07.txt AC 59 ms 6912 KB
02-08.txt WA 33 ms 6144 KB
02-09.txt AC 78 ms 15488 KB
02-10.txt AC 51 ms 10240 KB
02-11.txt WA 50 ms 10240 KB
02-12.txt AC 56 ms 9984 KB
02-13.txt WA 55 ms 9984 KB
sample-01.txt AC 3 ms 256 KB
sample-02.txt AC 3 ms 256 KB