杭电 2120 并查集 判断环的个数

来源:互联网 发布:全国高校校花知乎 编辑:程序博客网 时间:2024/06/07 09:22

题意:富裕的女王 要给ACMER分地,女王的土地中有很多瞭望塔,女王命令下人在瞭望塔(watchtower) 与瞭望塔之间建立笔直的围墙,被围墙圈起来的土地可以用来奖励ACMER,但是女王智商捉急,不知道最多能奖励多少ACMER,请你来帮忙。

通过并查集的Union操作就可以实现瞭望塔之间的联通,如果两个瞭望塔所在根节点相同,说明有环。

思路:手动画图发现如果1 2 3的根节点都为0 合并1 2      2 3    1 3 题目说了不会交叉,就是不会出现3在1 2的直线上,所以此时三个环

#include"stdio.h"  int set[1001];  int find(int x)  {      if(set[x]==x)return x;      set[x]=find(set[x]);      return set[x];  }  int main()  {      int i;      int ans;      int a,b;      int x,y;      int n,m;      while(scanf("%d%d",&n,&m)!=-1)      {          for(i=0;i<n;i++)              set[i]=i;          ans=0;          for(i=0;i<m;i++)          {              scanf("%d%d",&x,&y);              a=find(x);              b=find(y);              if(a==b)                  ans++;              else set[b]=a;          }          printf("%d\n",ans);      }      return 0;  }  



0 0
原创粉丝点击