随笔分类 - ACM_并查集
摘要:step1:首先需要一个数组来记录每个节点的映射的点,初始化时每个点都映射到自己身上。step2:接着对每个输入的需要并操作的点进行并操作,并且将其中的一个根节点记录的节点数赋0,另一个为新的根节点,它的节点总数也需要更新。step3:遇到需要删除的点的时候,首先找到这个点所在的树的根节点,让根节点记录节点的总数减1,将这个节点映射到一个新的节点(编号大于n),并初始化新节点的数据。step4:遍历所有的点,若节点记录的节点数大于0,就让计数器自增1,最后计数器的数值就是所求的答案。http://acm.hrbeu.edu.cn/index.php?act=problem&id=100
阅读全文
摘要:step1:对输入的节点标记并进行合并操作。合并时两个节点不能有相同的根节点,否则会构成环。若b要接到a上,保证b是根节点,否则b将会有两个父节点。若无以上两种情况,可以合并两棵树。step2:每组数据输入结束后要计算根节点的总数,若根节点总数不为1,则构成的不是树。step3:根据以上判断输出结果,每组数据输出后要初始化数据。http://poj.org/problem?id=1308 1 #include 2 #include 3 #include 4 int f[1000000],flag[1000000]; 5 int find(int x) 6 { 7 if(f[x]!=x)...
阅读全文
摘要:step1:结构体中包括两个元素,一个是该节点的父节点,一个是以该节点为根节点的树的节点数目。初始化时每个节点视为一棵独立的树,这棵树中的元素只有1个。step2:输入每对关联的点时进行并操作,将两棵树的节点之和记录在合并之后的树根上。step3:输入结束后,查询编号0节点的根节点,这个根节点上记录的节点数目就是所求的结果。http://poj.org/problem?id=1611 1 #include 2 #include 3 typedef struct 4 { 5 int pre,num; 6 }Tree; 7 Tree tree[30000]; 8 int find(int ...
阅读全文
摘要:step1:在输入每个点的坐标后,首先根据计算的通信范围建立每对计算机的连通关系。step2:当输入的操作是维修时,就将本台计算机标记为完好,并将其所有与其可以通信的且完好的计算机进行并操作,那么可通信的计算机就在一棵树中了,具有相同的根节点。step3:当输入的操作为查询时,若两计算机具有相同的根节点,则可以通信,否则不可以通信。http://poj.org/problem?id=2236 1 #include 2 #include 3 #include 4 #include 5 int map[1005][1005]; 6 int mul(int x) 7 { 8 return x...
阅读全文
摘要:step1:首先将每个节点视为根节点,初始化每个节点的父节点是自己。step2:如果要使不同宗教最多,那就是每个人的都不同,那么最大的宗教数就是人数了。step3:设输入一对宗教相同的,且这两人当前不属于同一集合,则最大的宗教数减1。step4:当所有的输入结束后,结果就出来了。http://poj.org/problem?id=2524 1 #include 2 int f[50005],sum; 3 int find(int x) 4 { 5 if(f[x]!=x) 6 f[x]=find(f[x]); 7 return f[x]; 8 } 9 void m...
阅读全文

浙公网安备 33010602011771号