hd 1672 Cuckoo Hashing
来源:互联网 发布:彩票统计软件cpzyrj 编辑:程序博客网 时间:2024/05/16 19:51
比赛中没什么想法,理解成有2张hash表了.后来看了小波的解题报告,题目转换成求联通分枝,并判断每个联通分枝的结点数是否小于等于变数,不是的话就不能正常hash了.判断联通的时候用了并查集.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
#define MAX 10001
typedef struct
{
int num_dge; //该点连接到的边的数量
int par; //父结点
int sum_dge; //该点为父结点时的边的条数
int num_node; //改点为父结点时的点数
}Node;
Node a[MAX];
int m, n;
int b[MAX][2];
int find(int x)
{
if(a[x].par == x)
return x;
int t = x;
while (a[t].par != t)
{
t = a[t].par;
}
int tt;
while (x != t)
{
tt = a[x].par;
a[x].par= t;
x = tt;
}
return t;
}
void unit(int x, int y)
{
if(a[x].num_node >= a[y].num_node)
{
a[x].num_node += a[y].num_node, a[y].par = x;
a[x].sum_dge += a[y].sum_dge;
}
else
{
a[y].num_node += a[x].num_node, a[x].par = y;
a[y].sum_dge += a[x].sum_dge;
}
}
int main()
{
int t;
int i, j, k;
cin >> t;
while (t--)
{
cin >> m >> n;
for (i=0; i<n; ++i)
{
a[i].par = i;
a[i].num_dge = 0;
a[i].num_node = 1;
a[i].sum_dge = 0;
}
int s, e;
for (i=0; i<m; ++i)
{
cin >> b[i][0] >> b[i][1];
a[b[i][0]].num_dge++;
a[b[i][1]].num_dge++;
}
for (i=0; i<n; ++i)
{
a[i].sum_dge = a[i].num_dge;
}
for (i=0; i<m; ++i)
{
s = b[i][0], e = b[i][1];
int n1 = find(s);
int n2 = find(e);
if(n1 != n2)
unit(n1, n2);
}
for (i=0; i<n; ++i)
{
if(a[i].par == i && a[i].num_node > 1)
{
if(a[i].num_node < a[i].sum_dge/2)
break;
}
}
if(i>=n)
cout << "successful hashing" << endl;
else
cout << "rehash necessary" << endl;
}
return 0;
}
#include <string>
#include <vector>
using namespace std;
#define MAX 10001
typedef struct
{
int num_dge; //该点连接到的边的数量
int par; //父结点
int sum_dge; //该点为父结点时的边的条数
int num_node; //改点为父结点时的点数
}Node;
Node a[MAX];
int m, n;
int b[MAX][2];
int find(int x)
{
if(a[x].par == x)
return x;
int t = x;
while (a[t].par != t)
{
t = a[t].par;
}
int tt;
while (x != t)
{
tt = a[x].par;
a[x].par= t;
x = tt;
}
return t;
}
void unit(int x, int y)
{
if(a[x].num_node >= a[y].num_node)
{
a[x].num_node += a[y].num_node, a[y].par = x;
a[x].sum_dge += a[y].sum_dge;
}
else
{
a[y].num_node += a[x].num_node, a[x].par = y;
a[y].sum_dge += a[x].sum_dge;
}
}
int main()
{
int t;
int i, j, k;
cin >> t;
while (t--)
{
cin >> m >> n;
for (i=0; i<n; ++i)
{
a[i].par = i;
a[i].num_dge = 0;
a[i].num_node = 1;
a[i].sum_dge = 0;
}
int s, e;
for (i=0; i<m; ++i)
{
cin >> b[i][0] >> b[i][1];
a[b[i][0]].num_dge++;
a[b[i][1]].num_dge++;
}
for (i=0; i<n; ++i)
{
a[i].sum_dge = a[i].num_dge;
}
for (i=0; i<m; ++i)
{
s = b[i][0], e = b[i][1];
int n1 = find(s);
int n2 = find(e);
if(n1 != n2)
unit(n1, n2);
}
for (i=0; i<n; ++i)
{
if(a[i].par == i && a[i].num_node > 1)
{
if(a[i].num_node < a[i].sum_dge/2)
break;
}
}
if(i>=n)
cout << "successful hashing" << endl;
else
cout << "rehash necessary" << endl;
}
return 0;
}
- hd 1672 Cuckoo Hashing
- HDU-1672-Cuckoo Hashing
- Cuckoo Hashing
- csu:1887: Cuckoo Hashing
- B(1887): Cuckoo Hashing
- Cuckoo Hashing :二分匹配问题
- Cuckoo for Hashing(hash)
- 南邮 OJ 1523 Cuckoo Hashing
- Cuckoo for Hashing--关于哈希表的练习
- HNU 13064 Cuckoo for Hashing解题报告 North America - East Central 2013
- cuckoo framework
- Cuckoo Search
- Cuckoo Sandbox
- Hashing
- Hashing
- Hashing
- Hashing
- Hashing
- 中文SqlHelper.cs类
- 数据库架构更新Sql语句编写规范
- [转]用VB实现简体繁体互换
- Eclipse中Jode Decompiler插件安装
- 数据库正规化和设计技巧
- hd 1672 Cuckoo Hashing
- vs2005中优化代码
- u32 __u32 - 内核源码 - Linux论坛
- asp.net中的身份验证
- 数据仓库开发难点有哪些?
- 算法-java 递归中的Fibonacci数列
- Myeclipse Blue Edition 6.1可用的CXF 2.0插件STP
- 使用SQL_TRACE进行数据库诊断
- Hibernate的缓存机制