Union Find就是所谓的并查集。
本题做的很无语,最后发现居然是输入搞错,一直WA。
不能使用循环接受输入,否则是WA的,气死人,浪费那么多时间就为了这个。
难点:
1 构建关系树
2 构建公式
3 快速更新公式
要抽象思维出什么对应什么的关系和上面是逆关系,就是利用0,1,2构建出父子节点之间的关系值,我是这样去思考构建出准确无误的公式的。
这样的抽象度是挺高的,需要多多训...
分类:
其他好文 时间:
2014-07-01 11:15:20
阅读次数:
190
OVS中流表操作的理解关键在于这里哈希表的实现,引入的 flex_array方便了内存的管理,通过 hash&(桶数-1)可以随机的将一个元素定位到某一个桶中。
接下来是代码细节。
一. 核心数据结构
//流表
struct flow_table
{
struct flex_array
* buckets; //具体的流表项
unsigned...
分类:
其他好文 时间:
2014-07-01 11:09:12
阅读次数:
638
本题也是个标准的并查集题解。
操作完并查集之后,就是要找和0节点在同一个集合的元素有多少。
注意这个操作,需要先找到0的父母节点,然后查找有多少个节点的额父母节点和0的父母节点相同。
这个时候需要对每个节点使用find parent操作,因为最后状态的时候,节点的parent不一定是本集合的根节点。
#include
const int MAX_N = 30001;
stru...
分类:
其他好文 时间:
2014-07-01 10:50:15
阅读次数:
179
c++中经常操作的内存分为以下几个类别:
1、栈区(stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等等。其操作方式类似于数据结构中的栈;只要栈的剩余空间大于申请空间,系统就为其提供内存,否则包异常提示栈溢出。在windows下栈是向低地址拓展的数据结构,是一块连续的内存空间,栈顶的地址和栈的最大空间是系统预定好的。。
在函数调用时,第一个进栈的是主函数的下一条指令,的地...
分类:
编程语言 时间:
2014-07-01 08:44:03
阅读次数:
265
题目:
链接:点击打开链接
题意:
输入n,给出n行数据,每行有两个字符串,输出关系网络中朋友的个数,n行。
思路:
代码:
#include
#include
#include
#include
using namespace std;
const int N = 22;
const int M = 200020;
st...
分类:
其他好文 时间:
2014-07-01 08:14:07
阅读次数:
189
题目:
链接:点击打开链接
题意:
思路:
冲突的条件是:两个人坐在同一行,同时他们到根节点的差值等于他们之间的差值,这时就产生冲突了。于是我们可以用一个dist数组来保存节点到根的距离,而这个距离在路径压缩的时候更新一下就可以了,dist[x]+=dist[parent[x]]。然后就是合并后的距离,令r1=Find(u),r2=Fin...
分类:
其他好文 时间:
2014-07-01 08:13:34
阅读次数:
201
题目:
链接:
题意:
思路:
代码:
#include
#include
#include
using namespace std;
const int N = 30030;
int root[N];
int sum[N],rank[N];//sum[i]表示i下面的积木个数
int q;
int findset(int x)
{
if(x == r...
分类:
其他好文 时间:
2014-07-01 08:12:55
阅读次数:
178
PHP中有一种数据类型非常重要,它就是关联数组,又称为哈希表(hash table),是一种非常好用的数据结构。
在程序中,我们可能会遇到需要消重的问题,举一个最简单的模型:
有一份用户名列表,存储了 10000 个用户名,没有重复项;
还有一份黑名单列表,存储了 2000 个用户名,格式与用户名列表相同;
现在需要从用户名列表中删除处在黑名单里的用户名,要求用尽量快的时间处理。
...
分类:
Web程序 时间:
2014-07-01 08:06:23
阅读次数:
171
题目:
链接:点击打开链接
题意:
把编号为1~n的龙珠放到编号为1~n的城市中去。现在有T和Q两种操作:
T:A B 把A龙珠所在城市的所有龙珠转移到B城市中。
Q:A 表示查询A龙珠的一些信息:X(A所在的城市),Y(A所在城市龙珠的数目),Z(A转移到该城市被移动的次数)。
思路:
代码:
#...
分类:
其他好文 时间:
2014-07-01 07:48:17
阅读次数:
220
本题是标准的并查集了,最后利用这些集求有多少独立集。
所以这里也写个标准程序过了。
最后查找独立集合: 看有多少个节点的父母节点是自己的,那么就是独立集合了。自己做自己的父母当然最独立的了,没有任何依赖,呵呵。
#include
const int MAX_N = 50001;
//const int MAX_M = MAX_N/2 * (MAX_N-1) + 1;
int N, M;
...
分类:
其他好文 时间:
2014-07-01 07:46:53
阅读次数:
160