Problem:
Score : 500 points

Problem Statement

There are N cards placed face down in a row. On each card, an integer 1 or 2 is written.

Let A_i be the integer written on the i-th card.

Your objective is to guess A_1, A_2, ..., A_N correctly.

You know the following facts:

For each i = 1, 2, ..., M, the value A_{X_i} + A_{Y_i} + Z_i is an even number.

You are a magician and can use the following magic any number of times:

Magic: Choose one card and know the integer A_i written on it. The cost of using this magic is 1.

What is the minimum cost required to determine all of A_1, A_2, ..., A_N?

It is guaranteed that there is no contradiction in given input.

Constraints

All values in input are integers.

2 \leq N \leq 10^5

1 \leq M \leq 10^5

1 \leq X_i < Y_i \leq N

1 \leq Z_i \leq 100

The pairs (X_i, Y_i) are distinct.

There is no contradiction in input. (That is, there exist integers A_1, A_2, ..., A_N that satisfy the conditions.)

Input

Input is given from Standard Input in the following format:

N M
X_1 Y_1 Z_1
X_2 Y_2 Z_2
\vdots
X_M Y_M Z_M

Output

Print the minimum total cost required to determine all of A_1, A_2, ..., A_N.

Sample Input 1

3 1
1 2 1

Sample Output 1

2

You can determine all of A_1, A_2, A_3 by using the magic for the first and third cards.

Sample Input 2

6 5
1 2 1
2 3 2
1 3 3
4 5 4
5 6 5

Sample Output 2

2

Sample Input 3

100000 1
1 100000 100

Sample Output 3

99999

Solution in Ruby (2.3.3) (judge verdict: Wrong Answer)

N, M = gets.split.map(&:to_i)
x, y, z = M.times.map{gets.split.map(&:to_i)}.transpose
par = Array.new(N+1, 0)
mark = 1
for i in 0..(M-1)
  if z[i] % 2 == 0
    if par[x[i]] != 0
      par[y[i]] = par[x[i]]
    elsif par[y[i]] != 0
      par[x[i]] = par[y[i]]
    else
      par[x[i]] = par[y[i]] = mark
      mark += 1
    end
  else
    if par[x[i]] != 0
      par[y[i]] = par[x[i]]
    elsif par[y[i]] != 0
      par[x[i]] = par[y[i]]
    else
      par[x[i]] = mark
      par[y[i]] = mark + 1
      mark += 2
    end
  end
end
i = M-1
while i > 0
  if z[i] % 2 == 0
    if par[x[i]] != par[y[i]]
      maxm = [par[x[i]], par[y[i]]].max
      par[x[i]] = par[y[i]] = maxm
    end
  else
    maxn = [par[x[i]], par[y[i]]].max
    minn = [par[x[i]], par[y[i]]].min
    if maxn - minn != 1
      if par[x[i]] > par[y[i]]
        par[x[i]] = maxn
        par[y[i]] = minn
      else
        par[y[i]] = maxn
        par[x[i]] = minn
      end
    end
  end
  i -= 1
end
cnt = 0
cmb = Hash.new(0)
for i in 1..N
  if par[i] == 0
    cnt += 1
  else
    cmb[par[i]] += 1
  end
end
cmbs = 0
cmb.each do |k, v|
  cmbs += 1 if k > 0  
end
cmbs += (cmbs % 2 == 0 ? 0 : 1)
cmbs /= 2
puts cnt + cmbs