一、近期总结 1)最近在洛谷上刷了一些题,感觉还可以,难度不是太大,主要是一些基础模拟,不过模拟起来需要花费点时间。有一道题是关于环的,需要进行破环,之前有听老师讲过,但没自己做过,破环主要是将一个环的全部元素按顺序重复一次。还有一个贪心的题目,好久没做了,都快忘完了,希望能够在之后的VJ比赛上多注意一下。还有做题时总是不注意细节,出现错误,必须去测试不同数据去发现错误。 2)图论的题目不太明白,听得迷迷糊糊的,还没去做题,这两天有点懈怠了,还是应该以学习的东西为重。 二、图论学习 1、并查集 !) 定义: 并查集是一种用来管理分组情况的数据结构,可以高效进行,查和并操作。 2)结构:树结构、每个元素对应结点每个组对应一棵树。 实现代码:
int par[]; int rank[[; void chushi(int n;)//n各节点表示n个元素,开始时没有边。 { for (int i=0;i<n;i++) par[i]=i; rank[i]=0; } int find(int x)//查询该元素的根,如果是本身,则该元素单独一组,否则递归直到找到为止。 { if(par[x]==x) { return x; } else { return par[x]=find(par[x]); } } void untie(int x,int y) { x=find(x); y=find(y); if(x==y) return;//同根不需要合并 if(rank[x]<rank[y]) { par[x]=y; } else { par[y]=x; if(rank[x]==rank[y]) rank[x]++; } } bool same(int x,int y) { return find(x)==find(y);