#include <iostream>
using namespace std;
struct type1
{
int parent;
int rank;
} FOOD[50001];
int find(int i)
{
int t = FOOD[i].parent;
if (t < 0)
return i;
FOOD[i].parent = find(t);
FOOD[i].rank = (FOOD[t].rank + FOOD[i].rank) % 3;
return FOOD[i].parent;
}
int main()
{
int n, k;
int d, x, y, i;
int a, b;
int lie = 0;
scanf("%d %d", &n, &k);
for (i = 1; i <= n; i++)
{
FOOD[i].parent = -1;
FOOD[i].rank = 0;
}
for (i = 0; i < k; i++)
{
scanf("%d %d %d", &d, &x, &y);
if (x > n || y > n)
lie++;
else if (d == 1)
{
a = find(x);
b = find(y);
if (a == b)
{
if (FOOD[x].rank != FOOD[y].rank)
lie++;
}
else
{
FOOD[a].parent = b;
FOOD[a].rank = (FOOD[y].rank - FOOD[x].rank + 3) % 3;
}
}
else /* d == 2 */
{
if (x == y)
lie++;
else
{
a = find(x);
b = find(y);
if (a == b)
{
if (FOOD[x].rank != (FOOD[y].rank + 1) % 3)
lie++;
}
else
{
FOOD[a].parent = b;
FOOD[a].rank = (FOOD[y].rank - FOOD[x].rank + 4) % 3;
}
}
}
}
printf("%d\n", lie);
return 0;
}
using namespace std;
struct type1
{
int parent;
int rank;
} FOOD[50001];
int find(int i)
{
int t = FOOD[i].parent;
if (t < 0)
return i;
FOOD[i].parent = find(t);
FOOD[i].rank = (FOOD[t].rank + FOOD[i].rank) % 3;
return FOOD[i].parent;
}
int main()
{
int n, k;
int d, x, y, i;
int a, b;
int lie = 0;
scanf("%d %d", &n, &k);
for (i = 1; i <= n; i++)
{
FOOD[i].parent = -1;
FOOD[i].rank = 0;
}
for (i = 0; i < k; i++)
{
scanf("%d %d %d", &d, &x, &y);
if (x > n || y > n)
lie++;
else if (d == 1)
{
a = find(x);
b = find(y);
if (a == b)
{
if (FOOD[x].rank != FOOD[y].rank)
lie++;
}
else
{
FOOD[a].parent = b;
FOOD[a].rank = (FOOD[y].rank - FOOD[x].rank + 3) % 3;
}
}
else /* d == 2 */
{
if (x == y)
lie++;
else
{
a = find(x);
b = find(y);
if (a == b)
{
if (FOOD[x].rank != (FOOD[y].rank + 1) % 3)
lie++;
}
else
{
FOOD[a].parent = b;
FOOD[a].rank = (FOOD[y].rank - FOOD[x].rank + 4) % 3;
}
}
}
}
printf("%d\n", lie);
return 0;
}
浙公网安备 33010602011771号