不谈复杂度,RE很离奇唉,本地良好
#include <bits/stdc++.h>
using namespace std;
bool vis[1000][1000];
int a[1000][1000];
int dfs(int x, int y)
{
vis[x][y] = 1;
if (a[x][y + 1] == a[x][y] && ! vis[x][y + 1])
dfs(x, y + 1);
if (a[x][y - 1] == a[x][y] && ! vis[x][y - 1])
dfs(x, y - 1);
if (a[x + 1][y] == a[x][y] && ! vis[x + 1][y])
dfs(x + 1, y);
if (a[x - 1][y] == a[x][y] && ! vis[x - 1][y])
dfs(x - 1, y);
}
int main()
{
int n, m;
cin >> n >> m;
int c, x, y;
for (int i = 0; i < 600; i++)
for (int j = 0; j < 600; j++)
a[i][j] = -1;
while (m--)
{
scanf("%d%d%d", &c, &x, &y);
a[x + 5][y + 5] = c;
int ans = 0;
for (int i = 1 + 5; i <= n + 5; i++)
for (int j = 1 + 5; j <= n + 5; j++)
if (a[i][j] != -1 && ! vis[i][j])
{
ans++;
dfs(i, j);
}
for (int i = 0; i < 600; i++)
for (int j = 0; j < 600; j++)
vis[i][j] = 0;
cout << ans << "\n";
}
return 0;
}