我和我同学在机房调了 2h,一直是 30 分。
我查了一下本题以前的题解区和讨论版:发现题解全是并查集(我写的是模拟),讨论版中有一个帖用的也是模拟。
问题好像是“输入 a 吃 b b 吃 c 之后再输入 a 吃 c 程序就挂了”。有没有是模拟且 AC 大佬帮忙调一下,谢谢qwq。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<set>
#include<unordered_map>
#include<bitset>
#include <climits>
using namespace std;
const int MAXN=100005;
inline int read(){
int x=0,f=1;
char ch=getchar();
while (ch<'0'||ch>'9'){
if (ch=='-') f=-1;
ch=getchar();
}
while (ch>='0'&&ch<='9'){
x=x*10+ch-48;
ch=getchar();
}
return x*f;
}
int a[MAXN];
signed main(){
int n,k;
int ans=0;
n=read();k=read();
for(int i=1;i<=k;i++){
int op,x,y;
op=read();x=read();y=read();
if(max(x,y)>n){
ans++;
continue;
}
if(x==y&&op==2){
ans++;
continue;
}
if(op==1){
if((a[y]==x&&a[x]!=y)||(a[x]==y&&a[y]!=x)){
ans++;
continue;
}else{
a[y]=x;
a[x]=y;
}
}else{
if(a[x]==y&&a[y]==x){
ans++;
continue;
}else{
if(a[y]==x&&a[x]!=y){
ans++;
continue;
}else{
a[x]=y;
}
}
}
}
cout<<ans;
return 0;
}