#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define repeat(i,n) for (int i = 0; (i) < (n); ++ (i)) #define debug(x) cerr << #x << ": " << x << '\n' #define debugArray(x,n) for(long long hoge = 0; (hoge) < (n); ++ (hoge)) cerr << #x << "[" << hoge << "]: " << x[hoge] << '\n' #define debugArrayP(x,n) for(long long hoge = 0; (hoge) < (n); ++ (hoge)) cerr << #x << "[" << hoge << "]: " << x[hoge].first<< " " << x[hoge].second << '\n' using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair Pii; typedef vector vint; typedef vector vll; const long long INF = INT_MAX; const ll MOD = 1e9+7; int main(){ int N,M;cin>>N>>M; vector G(N); repeat(i,M){ int a,b,c;cin>>a>>b>>c;a--;b--; G[a].push_back(b); G[b].push_back(a); } int ans = 0; vector used(N,false); repeat(i,N){ if(used[i])continue; ans++; queue Q; Q.push(i); while(!Q.empty()){ int v=Q.front(); Q.pop(); if(used[v])continue; used[v]=true; for(int u:G[v]){ Q.push(u); } } } cout << ans << endl; return 0; }