union-set
the_conquer_zzy
计算机科学与技术专业
展开
-
hdu 1116 Play on Words
用深搜超时。 后来用欧拉回路。 union set 原来是并查集 ,是种数据结构,我看英文知道有这个union set 刚开始还以为是种算法。union set code:int height[MAX]; int root[MAX]; for(int i=0;i<26;i++){ root[i]=i; height[i]=1; }int Find(int原创 2017-08-03 21:02:38 · 187 阅读 · 0 评论 -
hdu 1198
主题思想 : 这个题目就是求有多少个联通分量。用union Find结构很容易做到union find 核心代码,带优化版本int a[maxn]; int cnt[maxn]; // 优化使用的,用来计数,一个根下有多少个节点。// initfor(int i=0;i<maxn;i++){ a[i]=i; cnt[i]=1; } int find(int v){ if(原创 2017-08-20 20:58:22 · 234 阅读 · 0 评论 -
hdu 1213 How Many Tables
主题思想 : union set 找联通分量。 union set 代码:初始化: //init for(int i=1;i<=n;i++){ a[i]=i; b[i]=1; } int Find(int i){ if(a[i]==i){ return a[i]; } a[i原创 2017-08-26 16:40:07 · 218 阅读 · 0 评论 -
hdu 1241
主题思想: 这题核心是Union Set ,但是需要自己以搜索的方式,构建哪些边是联通的信息, 搜索的时候,本来需要8个方向都要判断,但是由于从上往下,从左往右搜索,因此只需要对4个方向进行判断,避免了重复, AC代码:#include <iostream> #include<cstdio> #include<cstring> #include<string> using namespace s原创 2017-09-05 22:26:32 · 210 阅读 · 0 评论 -
hdu 1232 畅通工程
主题思想: union setunion set 核心代码: //init for(int i=1;i<=n;i++){ a[i]=i; h[i]=1; }int Find(int p){ if(a[p]==p) return p; a[p]=Find(a[p]); }void UN(int p,int原创 2017-09-02 16:00:21 · 201 阅读 · 0 评论 -
hdu 1301 Jungle roads
主题思想: 最小生成树,Prim 算法,或者Kruskal’s 但是我有点忘了, Kruskal 需要记录两个节点是不是已经连通,这个可以用UF来做。 Prim 算法,需要判断两个节点是不是已经在mst中了,判断标志。 我给弄混了。Kruskal 算法#include <iostream> #include<cstdio> #include<cstring> #include<queue>原创 2017-10-30 21:34:39 · 194 阅读 · 0 评论