CODE FESTIVAL 2016 Final

Submission #5433901

Source codeソースコード

import java.util.*;

public class Main {
	static int mod = 1000000007;
  static int size = 200000;
	static long[] fac = new long[size];
	static long[] finv = new long[size];
	static long[] inv = new long[size];
  static int INF = Integer.MAX_VALUE;

 	public static void main(String[] args){
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int m = scanner.nextInt();
		UnionFind uf = new UnionFind(n+m);
		for(int i = 0; i < n; i++){
			int k = scanner.nextInt();
			for(int j = 0; j < k; j++){
				int language = scanner.nextInt();
				uf.unite(i, language + n - 1);
			}
		}
		//System.out.println(uf.size(1));
		boolean flag = true;
		for(int i = 0; i < n-1; i++){
			if(!uf.same(i,i+1)){
				flag = false;
				break;
			}
		}
		if(flag){
			System.out.println("YES");
		}else{
			System.out.println("NO");
		}
	}
  static class Pair implements Comparable<Pair>{
    int x, y;
    Pair(int a, int b){
        x = a;
        y = b;
    }
    @Override
    public boolean equals(Object o){
        if (this == o) return true;
        if (!(o instanceof Pair)) return false;
        Pair p = (Pair) o;
        return x == p.x && y == p.y;
    }
    @Override
    public int compareTo(Pair p){
        //return x == p.x ? y - p.y : x - p.x; //xで昇順にソート
        //return (x == p.x ? y - p.y : x - p.x) * -1; //xで降順にソート
        //return y == p.y ? x - p.x : y - p.y;//yで昇順にソート
        return (y == p.y ? x - p.x : y - p.y)*-1;//yで降順にソート
    }
  }
  //繰り返し二乗法
  public static long pow(long x, long n){
    long ans = 1;
    while(n > 0){
      if((n & 1) == 1){
        ans = ans * x;
        ans %= mod;
      }
      x = x * x % mod;
      n >>= 1;
    }
    return ans;
  }

  //fac, inv, finvテーブルの初期化、これ使う場合はinitComb()で初期化必要
	public static  void initComb(){
		fac[0] = finv[0] = inv[0] = fac[1] = finv[1] = inv[1] = 1;
		for (int i = 2; i < size; ++i) {
			fac[i] = fac[i - 1] * i % mod;
			inv[i] = mod - (mod / i) * inv[(int) (mod % i)] % mod;
			finv[i] = finv[i - 1] * inv[i] % mod;
		}
	}

	//nCk % mod
	public static long comb(int n, int k){
		return fac[n] * finv[k] % mod * finv[n - k] % mod;
	}

	//n! % mod
	public static long fact(int n){
		return fac[n];
	}

	//(n!)^-1 with % mod
	public static long finv(int n){
		return finv[n];
	}

  static class UnionFind {
    int[] parent;
    public UnionFind(int size) {
      parent = new int[size];
      Arrays.fill(parent, -1);
    }
    public boolean unite(int x, int y) {
      x = root(x);
      y = root(y);
      if (x != y) {
        if (parent[y] < parent[x]) {
          int tmp = y;
          y = x;
          x = tmp;
        }
        parent[x] += parent[y];
        parent[y] = x;
        return true;
      }
      return false;
    }
    public boolean same(int x, int y) {
      return root(x) == root(y);
    }
    public int root(int x) {
      return parent[x] < 0 ? x : (parent[x] = root(parent[x]));
    }
    public int size(int x) {
      return -parent[root(x)];
    }
  }
	public static int upperBound(long[] array, long value) {
			 int low = 0;
			 int high = array.length;
			 int mid;
			 while( low < high ) {
					 mid = ((high - low) >>> 1) + low; // (high + low) / 2
					 if( array[mid] <= value ) {
							 low = mid + 1;
					 } else {
							 high = mid;
					 }
			 }
			 return low;
	 }
  //n,mの最大公約数
  public static int gcd(int n, int m){
    if(m > n) return gcd(m,n);
    if(m == 0) return n;
    return gcd(m, n%m);
  }
}

Submission

Task問題 C - Interpretation
User nameユーザ名 rmkt
Created time投稿日時
Language言語 Java8 (OpenJDK 1.8.0)
Status状態 AC
Score得点 400
Source lengthソースコード長 3724 Byte
File nameファイル名
Exec time実行時間 519 ms
Memory usageメモリ使用量 84200 KB

Test case

Set

Set name Score得点 / Max score Cases
sample - sample-01.txt,sample-02.txt
dataset1 200 / 200 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 200 / 200 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

Test case

Case name Status状態 Exec time実行時間 Memory usageメモリ使用量
01-01.txt AC 95 ms 23380 KB
01-02.txt AC 137 ms 29332 KB
01-03.txt AC 143 ms 27496 KB
01-04.txt AC 149 ms 29656 KB
01-05.txt AC 138 ms 27476 KB
01-06.txt AC 137 ms 29700 KB
01-07.txt AC 145 ms 28460 KB
01-08.txt AC 139 ms 26708 KB
01-09.txt AC 138 ms 26068 KB
01-10.txt AC 137 ms 26964 KB
02-01.txt AC 431 ms 66840 KB
02-02.txt AC 507 ms 75924 KB
02-03.txt AC 450 ms 61724 KB
02-04.txt AC 490 ms 64900 KB
02-05.txt AC 502 ms 69228 KB
02-06.txt AC 487 ms 69148 KB
02-07.txt AC 504 ms 81232 KB
02-08.txt AC 461 ms 84172 KB
02-09.txt AC 519 ms 84200 KB
02-10.txt AC 480 ms 63660 KB
02-11.txt AC 486 ms 67112 KB
02-12.txt AC 453 ms 65856 KB
02-13.txt AC 449 ms 65252 KB
sample-01.txt AC 95 ms 24788 KB
sample-02.txt AC 94 ms 22868 KB