如题:
#include <bits/stdc++.h>
using namespace std;
int uf[200005];
char xz[100005];
int visit[100005];
int found(int k,int depth = 1)
{
if(uf[k] == k || visit[k])
{
return k;
}
visit[k] = depth;
uf[k] = found(uf[k],depth + 1);
visit[k] = 0;
return uf[k];
}
void solve()
{
int n,m;
cin >> n >> m;
for(int i = 1;i <= 200000;i++) uf[i] = i;
for(int i = 1;i <= m;i++)
{
char k;
cin >> k;
if(isalpha(k))
{
int r;
cin >> r;
xz[found(r)] = k;
}
else
{
int r,t;
cin >> r >> t;
if(k == '+') xz[found(r)] = xz[t];
else xz[found(r)] = xz[t + r];
}
}
for(int i = 1;i <= n;i++) xz[i] = xz[found(i)];
int ans = 0;
for(int i = 1;i <= n;i++) ans += (xz[i] == 'U');
cout << ans << endl;
}
int main()
{
int n,m;
cin >> n >> m;
while(m--) solve();
return 0;
}