#include #include #include using namespace std; #include struct UF{ int n; vectorparent,rank; UF(int n_=0):n(n_),parent(n_),rank(n_,1) { for(int i=0;i >edge; vectorG[1<<17]; int cnt[1<<17]; main() { cin>>N>>M; UF uf(N); for(int i=0;i>a>>b>>c; a--,b--; if(c==1)uf.unite(a,b); else edge.push_back(make_pair(a,b)); } for(pairp:edge) { int u=uf.find(p.first); int v=uf.find(p.second); if(u==v)continue; G[u].push_back(v); cnt[v]++; } queueP; int vc=0; for(int i=0;i