A - Wireless Network-poj2236(简单并查集)
#include<stdio.h> const int maxn = ; struct node
{
int x, y, ok;
}p[maxn];//保存所有的村庄,ok表示是否已经修复 int f[maxn]; int Len(node a, node b)//求两个村庄的距离
{
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
int Find(int x)
{
if(f[x] != x)
f[x] = Find(f[x]);
return f[x];
} int main()
{
int i, N, D, u, v;
char s[]; scanf("%d%d", &N, &D); D = D*D;//因为距离只做判断,所以直接用平方数判断更准确,避免小数 for(i=; i<=N; i++)
{
scanf("%d%d", &p[i].x, &p[i].y);
p[i].ok = ;
f[i] = i;
} while(scanf("%s", s) != EOF)
{
if(s[] == 'O')
{
scanf("%d", &u); if(p[u].ok == )
{
p[u].ok = ;
for(i=; i<=N; i++)
{
if(u != i && p[i].ok && Len(p[i], p[u]) <= D)
{
v = Find(i);
int k = Find(u);
f[k] = v;
}
}
} }
else
{
scanf("%d%d", &u, &v);
u = Find(u);
v = Find(v); if(u != v)
printf("FAIL\n");
else
printf("SUCCESS\n");
}
} return ;
}
重构了一下代码,试图弄出来并查集的模版,不过不是太理想
#include<stdio.h> const int maxn = 1e3+; struct FindSets
{
int *Father, size; FindSets(int size)
: size(size)
{
Father = new int[size+];
for(int i=; i<=size; i++)
Father[i] = i;
}
~FindSets()
{
delete[] Father;
}
int Find(int x)
{
if(Father[x] != x)
Father[x] = Find(Father[x]);
return Father[x];
}
bool connect(int u, int v, bool need)
{///判断两个点是否相连,如果需要相连则连接
u = Find(u);
v = Find(v);
if(need == true)
Father[v] = u;
return u == v;
}
}; struct point
{
int x, y, fine;
}; bool Dis(point &a, point &b, int D)
{///判断两点之间的距离是否大于D
return ((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)) <= D*D;
} void Repair(int u, int D, point p[], FindSets &fs)
{///修复点u
for(int i=; i<=fs.size; i++)
{
if(p[i].fine == true && Dis(p[i], p[u], D))
fs.connect(i, u, true);
}
p[u].fine = true;
} int main()
{
int N, D; scanf("%d%d", &N, &D); FindSets fs(N);
point *p = new point[N+](); for(int i=; i<=N; i++)
scanf("%d%d", &p[i].x, &p[i].y); int u, v;
char op[]; while(scanf("%s", op) != EOF)
{
if(op[] == 'O')
{
scanf("%d", &u);
Repair(u, D, p, fs);
}
else
{
scanf("%d%d", &u, &v);
if(fs.connect(u, v, false) == true)
printf("SUCCESS\n");
else
printf("FAIL\n");
}
} delete[] p; return ;
}
A - Wireless Network-poj2236(简单并查集)的更多相关文章
- Wireless Network POJ - 2236 (并查集)
#include<iostream> #include<vector> #include<string> #include<cmath> #includ ...
- POJ 2236 Wireless Network 第一次做并查集,第一次写博客
题意是判断两台电脑是否能通讯,两台修好的电脑距离在指定距离内可直接通讯,且两台修好的电脑能通过一台修好的电脑间接通讯.代码如下: #include <iostream> #include ...
- POJ-2236(并查集)
Wireless NetWork POJ-2236 需要注意这里的树的深度需要初始化为0. 而且,find函数需要使用路径压缩,这里的unint合并函数也使用了优化(用一开始简单的合并过不了). #i ...
- POJ 2524 (简单并查集) Ubiquitous Religions
题意:有编号为1到n的学生,然后有m组调查,每组调查中有a和b,表示该两个学生有同样的宗教信仰,问最多有多少种不同的宗教信仰 简单并查集 //#define LOCAL #include <io ...
- poj1611 简单并查集
The Suspects Time Limit: 1000MS Memory Limit: 20000K Total Submissions: 32781 Accepted: 15902 De ...
- 1213 How Many Tables(简单并查集)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213 简单并查集,统计单独成树的数量. 代码: #include <stdio.h> #i ...
- 【简单并查集】Farm Irrigation
Farm Irrigation Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Tot ...
- ACM_“打老虎”的背后(简单并查集)
“打老虎”的背后 Time Limit: 2000/1000ms (Java/Others) Problem Description: “习大大”自担任国家主席以来大力反腐倡廉,各地打击贪腐力度也逐步 ...
- POJ-2236.WireleseNetwork.(并查集)
Wireless Network Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 43199 Accepted: 178 ...
随机推荐
- >/dev/null 2>&1 这句话的含义
1表示标准输出,2表示标准错误输出 2>&1表示将标准错误输出重定向到标准输出,这样,程序或者命令的正常输出和错误输出就可以在标准输出输出(也就是一起输出). 一般来讲标准输出和标准错误 ...
- DGV属性
1.控件的SelectedCells.Count属性可以判断用户是否已经选择数据,如果大于0说明有选择的数据. 2.SelectedCells[N].Value的属性可以获取某一行数据中某列的数据,其 ...
- .net版ckeditor配置水印功能(转)
本文简单讲解ckfinder控件给上图片加水印效果. 1.将ckfinder/plugins/watermark/bin/Debug目录下的CKFinder_Watermark.dll和CKFinde ...
- 【vc】14_网络编程_socket编程
1.计算机网络基本知识 最简单的网络程序如图: 提示:IP地址就相当于一个公司的总机号码,端口号就相当于分机号码.在打电话时,拨通总机后,还需要转到分机上. (1)协议 ·为进行网络中的数据交换(通信 ...
- iOS 数据持久性存储-对象归档
对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化),使用的时候读取该文件的保存路径读取文件的内容(也称为解档,反序列化) 主要涉及两个类:NSKeyedArichiver.NSKey ...
- nuc970连接jlink进行单步调试的设置
在 USB mode 下, 先跟 NuWriter 接上, 然后用以下的设定. 按 Keil 的 debug (不是 download to flash)就可以接上了.
- Mac OS X 开启SSH服务
系统偏好设置-->共享 没解锁的解个锁 选中远程登录&允许所有用户 若要远程登录这台电脑, 请键入 ssh 要登录的用户名@ip地址或电脑名,例:ssh zhanghua@applede ...
- shell调用shell
在默认条件下,执行shell文件会出现permission denied报错,一般是没有可执行权限.用chmod修改权限 chomd 777 score.sh //把所有权限给aa文件 777代表 ...
- Python元组、列表、字典
```python>>> help(tuple) Help on class tuple in module __builtin__: class tuple(object) │ t ...
- Git配置安装使用教程操作github上传克隆数据
Git是何方神圣? Git是用C语言开发的分布版本控制系统.版本控制系统可以保留一个文件集合的历史记录,并能回滚文件集合到另一个状态(历史记录状态).另一个状态可以是不同的文件,也可以是不同的文件内容 ...