
并查集
文章平均质量分 65
嘎达啊
无名小卒
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
hdu1232
#include using namespace std;int father[1005];int find_fa(int x){ if(father[x] != x) father[x] = find_fa(father[x]);//查找 路径压缩; return father[x];}int main(){ int n, m; while(原创 2013-06-01 12:48:13 · 374 阅读 · 0 评论 -
hdu1856
#include #include using namespace std;const int maxn = 10000005;int f[maxn];int a[maxn];void gg(){ for(int i = 1; i <= maxn; i++) { f[i] = i; a[i] = 1; }}int find原创 2013-06-01 19:41:22 · 510 阅读 · 0 评论 -
hdu1272
求是不是有回路,和是不是通路,如果两点的父节点是相同,则是回路,#include #include using namespace std;const int maxn = 100010;int f[maxn], s[maxn], flag;int find_fa(int x){ while(x != f[x])//不能压缩路径; x = f[x];原创 2013-06-03 21:24:58 · 476 阅读 · 0 评论 -
hdu1308
这道题我只在poj上ac了;主要考虑几个地放1:空的也是树, 如(0, 0);2: 要保证连通性,如,1 2, 2 3, 4 5, 0 0这就不符合;3:因为是有向图,也不能是双向, 也不能是回路;1 1, 0 0 不符合;1 2, 2 1, 0 0;4 :1 2, 0 0也是满足的;#include #include using namespace std;const i原创 2013-06-04 15:31:01 · 668 阅读 · 0 评论 -
hdu1198并查集
并查集:行中有哪些图能够连接,列中有哪些图能够连接,分别记录他们,这样就构成一个并查集的模型,每次把输入的数据遍历,用并查集记录他们最后再找几个最高父节点;#include #include int up[8],down[8],left[8],right[8];int f[2550];char map[55][55];char ud[100][100], lr[100][10原创 2013-06-04 19:38:09 · 477 阅读 · 0 评论 -
hdu3635
经过很多次的修改 终于以 703ms ac 了。思路:建立一个没有路劲压缩的并查集,在建的过程中用一个数组cs[]记录每个城中的龙珠数目;用一个k来记录某个龙珠被移动的次数;吸收换行时要注意 我错了很多次;#include #include using namespace std;int f[10005], k, cs[10005];//cs[]每个城中的龙珠;int n_n,原创 2013-06-05 16:12:30 · 460 阅读 · 0 评论 -
hdu2473
主要是设置虚点,如果某个点被删,并不真正的把他从集合中删除,而是让他变成一个集合中没有的点,主要靠res数组完成;#include #include using namespace std;const int maxn = 1e6+1e5+5;int f[maxn], res[maxn], ans;bool hash[maxn];void init(int x){原创 2013-06-08 19:31:50 · 674 阅读 · 0 评论 -
hdu 1325 poj 1308
树: 可以是空的 即空树 只输入 0 0;森林不是树,(这个条件可以通过看并查集的结果是否联通);不能有环,如 6 6 自身是环, 5 1(1上司是5), 1 5(5的上司还是5), 也是环;并查集的时候是反方向的,如 5 1 f[1] = 5; 输入 a, b的时候 如果b的上司不是自己的话 那么之前他的入度一定大于0;不符合每个元素只有一个入度; #include #incl原创 2013-07-25 22:42:54 · 466 阅读 · 0 评论