#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
int fa[N],x[N],y[N],in[N];
char v[N];
bool vis[N];
void dfs(int s){
if(fa[s]<=0){
vis[s]=1;
return;
}
if(vis[s]){
if(fa[fa[s]]<=0) fa[s]=fa[fa[s]];
else fa[s]=0;
return;
}
vis[s]=1;
dfs(fa[s]);
fa[s]=fa[fa[s]];
return;
}
signed main(){
int c,t;cin>>c>>t;
while(t--){
if(c==5||c==6){
int n,m;cin>>n>>m;
for(int i=0;i<N;i++){
x[i]=y[i]=0;
fa[i]=i;
in[i]=vis[i]=0;
}
for(int i=1;i<=m;i++){
cin>>v[i];
if(v[i]=='+') cin>>x[i]>>y[i];
else cin>>x[i];
}
for(int i=1;i<=m;i++){
if(v[i]=='+'){
if(fa[x[i]]==fa[y[i]]) continue;
if(fa[x[i]]!=x[i]&&fa[x[i]]!=-1) --in[fa[x[i]]];
fa[x[i]]=fa[y[i]];
++in[fa[y[i]]];
}
else fa[x[i]]=-1;
}
int cnt=0;
for(int i=1;i<=n;i++){
if(vis[i]||in[i]>0) continue;
dfs(i);
}
for(int i=1;i<=n;i++){
if(fa[i]==-1) ++cnt;
}
cout<<cnt<<endl;
continue;
}
}
return 0;
}
以上标记处的in[i]>0去掉就能过但是留着就过不了,如果是指向U的连通块肯定有入度为0的点啊,还是说我的入度这么写不对