模板 31 : 并查集(围棋棋子连通)

围棋的棋子有黑色和白色两种,相同颜色的棋子如果是上下或左右相邻的,则称这两个棋子是连通的,直接或间接连通的棋子称为一块棋。
•现在,不断给出N个落棋子的信息(颜色、横坐标、纵坐标),问棋盘上有多少块棋?
#includeusing namespace std;int n,m,ans;int num[1000101];//点的编号 int id[100010101];//点所在块的id void init(){//初始化 cin>>n>>m;for(int i=1;i<=n;i++){num[i]=id[i]=i;//开始的id都不相同 }ans=n;}int main(){init();for(int i=0;i>a>>b;ida=id[a];//a点在连通块id  idb=id[b];//b点在连通块id if(ida!=idb)//两个点在不同的连通块{for(int j=1;j<=n;j++){if(id[j]==ida){id[j]=idb;//改为相同的id }ans--;//连通块数减一 }}}cout<


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部