Submission #991898


Source Code Expand

#include <algorithm>
#include <bitset>
#include <cassert>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>

#define REP(i,s,n) for(int i=(int)(s);i<(int)(n);i++)

using namespace std;
typedef long long int ll;
typedef vector<int> VI;
typedef vector<ll> VL;
typedef pair<int, int> PI;
const ll mod = 1e9 + 7;


/*
 * Union-Find tree
 * header requirement: vector
 */
class UnionFind {
private:
  std::vector<int> disj;
  std::vector<int> rank;
public:
  UnionFind(int n) : disj(n), rank(n) {
    for (int i = 0; i < n; ++i) {
      disj[i] = i;
      rank[i] = 0;
    }
  }
  int root(int x) {
    if (disj[x] == x) {
      return x;
    }
    return disj[x] = root(disj[x]);
  }
  void unite(int x, int y) {
    x = root(x);
    y = root(y);
    if (x == y) {
      return;
    }
    if (rank[x] < rank[y]) {
      disj[x] = y;
    } else {
      disj[y] = x;
      if (rank[x] == rank[y]) {
	++rank[x];
      }
    }
  }
  bool is_same_set(int x, int y) {
    return root(x) == root(y);
  }
};

const int N = 100100;
VI avail[N];

int main(void){
  int n, m;
  cin >> n >> m;
  UnionFind uf(n);
  VI man(m, -1);
  REP(i, 0, n) {
    int ki;
    cin >> ki;
    REP(j, 0, ki) {
      int l;
      cin >> l;
      l--;
      avail[i].push_back(l);
      if (man[l] == -1) {
	man[l] = i;
      } else {
	uf.unite(man[l], i);
      }
    }
  }
  VI root(n, 0);
  int numroot = 0;
  REP(i, 0, n) {
    int r = uf.root(i);
    if (root[r] == 0) {
      numroot++;
      root[r] = 1;
    }
  }
  cout << (numroot >= 2 ? "NO" : "YES") << endl;
}

Submission Info

Submission Time
Task C - Interpretation
User kobae964
Language C++14 (GCC 5.4.1)
Score 400
Code Size 1848 Byte
Status AC
Exec Time 58 ms
Memory 7296 KB

Judge Result

Set Name sample dataset1 dataset2
Score / Max Score 0 / 0 200 / 200 200 / 200
Status
AC × 2
AC × 12
AC × 25
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 4 ms 2560 KB
01-02.txt AC 5 ms 2560 KB
01-03.txt AC 5 ms 2688 KB
01-04.txt AC 5 ms 2688 KB
01-05.txt AC 5 ms 2688 KB
01-06.txt AC 5 ms 2560 KB
01-07.txt AC 5 ms 2560 KB
01-08.txt AC 5 ms 2560 KB
01-09.txt AC 5 ms 2560 KB
01-10.txt AC 5 ms 2688 KB
02-01.txt AC 37 ms 3712 KB
02-02.txt AC 50 ms 6784 KB
02-03.txt AC 38 ms 3584 KB
02-04.txt AC 51 ms 5376 KB
02-05.txt AC 52 ms 6016 KB
02-06.txt AC 51 ms 5376 KB
02-07.txt AC 54 ms 6528 KB
02-08.txt AC 43 ms 6912 KB
02-09.txt AC 58 ms 7296 KB
02-10.txt AC 45 ms 5120 KB
02-11.txt AC 45 ms 5116 KB
02-12.txt AC 43 ms 5120 KB
02-13.txt AC 43 ms 5120 KB
sample-01.txt AC 5 ms 2560 KB
sample-02.txt AC 5 ms 2560 KB