发布网友 发布时间:2022-04-24 12:37
共1个回答
热心网友 时间:2023-10-13 01:32
#include <iostream>
#include <cstring>
using namespace std;
int a[50001], s[150001];
int S=-3;
int b()
{
return(S+=3);
}
int f(int i)
{
if(s[i]+1)return s[i]=f(s[i]);
return i;
}
int main()
{
int n, k, c(0);
memset(a, -1, sizeof(a));
memset(s, -1, sizeof(s));
cin>>n>>k;
while(k--)
{
int r, x, y;
scanf("%d%d%d", &r, &x, &y);
if(r<1||r>2||x<1||x>n||y<1||y>n)
{
++c;
continue;
}
a[x]=a[x]==-1?b():f(a[x]);
a[y]=a[y]==-1?b():f(a[y]);
if(a[x]/3-a[y]/3)
{
int xx=a[x]/3*3, yy=a[y]/3*3, dd=(a[x]%3-a[y]%3+r+2)%3;
if(rand()&1)
{
swap(xx, yy);
dd=(3-dd)%3;
}
for(int i=0; i!=3; ++i)
s[yy+i]=xx+(dd+i)%3;
a[x]=f(a[x]), a[y]=f(a[y]);
}
if((a[x]+r+2)%3-a[y]%3)
++c;
}
cout<<c<<endl;
}
//只是给你参考一下,如果不行就重写吧。