POJ 2236 Wireless Network
2016-03-23 14:34
495 查看
#include <cstdio> #include <iostream> using namespace std; const int MAX = 1e3 + 5; int x[MAX], y[MAX], fa[MAX], flag[MAX], r[MAX]; int n, d; void init(int n) { for (int i = 1; i <= n; ++i) { fa[i] = i; flag[i] = 0; r[i] = 1; } } int find(int x) { return fa[x] == x ? x : fa[x] = find(fa[x]); } void unite(int a, int b) { int t_a = a; int t_b = b; a = find(a); b = find(b); if (a == b) return ; if ((x[t_a] - x[t_b]) * (x[t_a] - x[t_b]) + (y[t_a] - y[t_b]) * (y[t_a] - y[t_b]) <= d * d && r[a] < r[b]) { fa[a] = b; } else if ((x[t_a] - x[t_b]) * (x[t_a] - x[t_b]) + (y[t_a] - y[t_b]) * (y[t_a] - y[t_b]) <= d * d && r[a] >= r[b]) { fa[b] = a; if (r[b] == r[a]) r[b]++; } } int main() { scanf("%d%d", &n, &d); init(n); for (int i = 1; i <= n; ++i) { scanf("%d%d", &x[i], &y[i]); } char type; while (scanf(" %c", &type)!= EOF)//为了" %c"吞掉前面的回车 { if (type == 'O') { int id; scanf("%d", &id); flag[id] = 1; for (int i = 1; i <= n; ++i) { if (flag[i] && i != id) { unite(i, id); } } } else if (type == 'S') { int id1, id2; scanf("%d%d", &id1, &id2); if (find(id1) == find(id2)) printf("SUCCESS\n"); else printf("FAIL\n"); } } return 0; }
相关文章推荐
- 浅谈MySQL数据库查询优化
- DB2 查看历史备份信息
- android知识点汇总
- mybatis在spring中使用批量插入
- Android Handler 异步消息处理机制的妙用 创建强大的图片加载类
- struts2 切换jar包版本的时候,idea造成jar包重复...导致错误
- bzoj 1458 士兵占领(最大流)
- #8号板测试汇总
- Hive取非Group by字段数据的方法
- leetcode--Best Time to Buy and Sell Stock
- Fragment详解(四)Fragment生命周期
- Android 截屏并保存
- Android安全专项-Apk加固
- Shell编程(四)---echo、printf
- 基于TestNG 与Selenium 的自动化测试设计与实施(二)
- css line-height:150%和1.5的不同之处
- 总结下并行和并发的差异
- db2 - 查看当前用户的权限
- Socket学习(一)
- mac 定时任务