#include<cstdio>
inline bool isdigit(char charactor){
return ('0'<=charactor&&charactor<='9');
};
inline int scan(void){
int result=0,minus=1;
char got=getchar();
while(!isdigit(got)){
got=getchar();
if(got=='-'){
minus=-1;
};
};
while(isdigit(got)){
result=result*10+got-'0';
got=getchar();
};
return result*minus;
};
inline void print(int printion){
if(printion<0){
putchar('-');
printion=-printion;
};
if(printion/10){
print(printion/10);
};
putchar(printion%10+'0');
};
int maxn,maxm,answer;
int map[505][505],father[505*505];
int nxtrow[5]={0,1,-1,0,0};
int nxtcol[5]={0,0,0,1,-1};
inline int find(int findtion){
if(findtion!=father[findtion]){
father[findtion]=find(father[findtion]);
};
return father[findtion];
};
int main(int argc,char **argv){
maxn=scan();
maxm=scan();
for(register int iter=1;iter<=maxn*maxm;++iter){
father[iter]=iter;
};
for(register int iter=1;iter<=maxm;++iter){
int color=scan()+1,row=scan(),col=scan();
map[row][col]=color;
++answer;
for(register int next=1;next<=4;++next){
int nextrow=row+nxtrow[next];
int nextcol=col+nxtcol[next];
if(map[nextrow][nextcol]!=color){
continue;
};
int nxt=find((nextrow-1)*maxn+nextcol);
int now=find((row-1)*maxn+col);
if(nxt!=now){
father[nxt]=now;
--answer;
};
};
print(answer);
putchar('\n');
};
return 0;
};
测试点一二三四六过了,其他全部RE,师叔祖开的不够大吗?求助!