提交时间:2024-07-30 14:39:02

运行 ID: 30785

#include <bits/stdc++.h> #define int long long using namespace std; int n,m,cnt; struct edge { int to; int nxt; int w; } e[1919810]; int v[114514],h[114514],x,ans[114514]; void add (int u,int v,int w) { cnt++; e[cnt].to = v; e[cnt].nxt = h[u]; h[u] = cnt; } int dfs (int p) { if (x < 2) { ans[p] = 1; } else { return 0; } v[p] = 1; int r = 1; for (int i = h[p];i;i = e[i].nxt) { if (v[e[i].to]) { continue; } x += e[i].w; r += dfs(e[i].to); x -= e[i].w; } v[p] = 0; return r; } signed main () { scanf("%lld %lld",&n,&m); for (int i = 1;i <= n - 1;i++) { int u,v,w; scanf("%lld %lld %lld",&u,&v,&w); add(u,v,w); add(v,u,w); } for (int i = 1;i <= m;i++) { memset(ans,0,sizeof(ans)); x = 0; int op,k; scanf("%lld %lld",&op,&k); if (op == 1) { e[2 * k].w = e[2 * k].w ^ 1; e[2 * k - 1].w = e[2 * k - 1].w ^ 1; } if (op == 2) { dfs(k); int ANS = 0; for (int i = 1;i <= n;i++) { if (ans[i]) { ANS++; } } printf("%lld\n",ANS); } } return 0; }