6

Untitled

public
6shootingstar9 Apr 01, 2025 Never 12
Clone
Plaintext paste1.txt 87 lines (87 loc) | 1.69 KB
1
#include<bits/stdc++.h>
2
using namespace std;
3
const int N=5*1e4+10;
4
int n,k;
5
int f[N];
6
int f2[N];
7
int r[N];
8
int ans;
9
int find(int x)
10
{
11
if(f[x]==x)
12
{
13
return x;
14
}
15
return f[x]=find(f[x]);
16
}
17
void hb(int x,int y)
18
{
19
int fx=find(x);
20
int fy=find(y);
21
if(r[fx]<r[fy])
22
{
23
swap(fx,fy);
24
}
25
if(fx!=fy)
26
{
27
f[fy]=fx;
28
r[fx]+=r[fy];
29
}
30
}
31
int main()
32
{
33
cin>>n>>k;
34
for(int i=1;i<=n;i++)
35
{
36
f[i]=i;
37
r[i]=1;
38
}
39
for(int i=1;i<=k;i++)
40
{
41
int d,x,y;
42
cin>>d>>x>>y;
43
if(x>n||y>n)
44
{
45
ans++;
46
}//当前的话中 X 或 Y 比 N 大,就是假话
47
else if(x==y&&d==2)
48
{
49
ans++;
50
}//当前的话表示 X 吃 X,就是假话
51
else
52
{
53
if(d==2)
54
{
55
if(f2[x]==y||find(x)==find(y))//如果发现之前 X 被 Y 吃,就是假话
56
{
57
ans++;
58
}
59
else
60
{
61
f2[y]=x;
62
}
63
}
64
else if(d==1)
65
{
66
if(find(x)!=find(y)&&r[x]!=1&&r[y]!=1)//如果发现 X 或 Y 之前属于另一种动物,就是假话
67
{
68
ans++;
69
}
70
else if(f2[x]==y||f2[y]==x)
71
{
72
ans++;
73
}
74
else
75
{
76
hb(x,y);
77
}
78
}
79
else
80
{
81
ans++;
82
}
83
}
84
}
85
cout<<ans;
86
return 0;
87
}