博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj2236 Wireless Network(并查集)
阅读量:5242 次
发布时间:2019-06-14

本文共 1529 字,大约阅读时间需要 5 分钟。

快4s过的,但是排行榜上很多1s内,不知道如何优化。。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #define lson l, m, rt<<1 9 #define rson m+1, r, rt<<1|110 #define IO ios::sync_with_stdio(false);cin.tie(0);11 #define INF 0x3f3f3f3f12 typedef unsigned long long ll;13 using namespace std;14 int n, num, d, s, t, pre[10010];15 char c;16 typedef struct{17 int x, y;18 }Node;19 Node node[10010];20 int flag[10010];21 ll length(ll a, ll b)22 {23 return a*a+b*b;24 }25 int find(int x)26 {27 while(x != pre[x]){28 x = pre[x];29 }30 return x;31 }32 void join(int k)33 {34 int tx = find(k); 35 pre[k] = tx;//优化 36 for(int i = 1; i <= n; i++){37 if(flag[i]&&i != k){38 ll tmp = length(node[k].x-node[i].x, node[k].y-node[i].y);39 if(tmp<=d*d){ //一开始直接pre[i]=tx然后wa了,一定要是把根接上去 40 int ty = find(i);41 pre[i] = ty;//优化 42 if(tx != ty){43 pre[ty] = tx;44 }45 }46 }47 }48 }49 int main()50 {51 IO;52 memset(flag, 0, sizeof(flag));53 cin >> n >> d;54 for(int i = 1; i <= n; i++){55 pre[i] = i;56 }57 for(int i = 1; i <= n; i++){58 cin >> node[i].x >> node[i].y;59 } 60 while(cin >> c){61 if(c == 'O'){62 cin >> num;63 flag[num] = 1;64 join(num);65 }66 else if(c == 'S'){67 cin >> s >> t;68 int tx = find(s);69 pre[s] = tx; 70 int ty = find(t);71 pre[t] = ty;72 if(tx == ty) cout << "SUCCESS" << endl;73 else cout << "FAIL" << endl;74 }75 }76 return 0; 77 }

 

转载于:https://www.cnblogs.com/Surprisezang/p/8994072.html

你可能感兴趣的文章
安装 Microsoft Silverlight 4 Tools for Visual Studio 2010 时报错 的解决办法.
查看>>
hunnu 小明的烦恼——找字符串
查看>>
2017-5-19 复合控件 ispostback 跨页面传值
查看>>
我的代码转风格了
查看>>
由css样式继承想到的
查看>>
java基础
查看>>
OpenGL基础学习杂文
查看>>
4-1 图像特效介绍
查看>>
慕课网access_token的获取
查看>>
移动采编app
查看>>
[HDOJ5500]Reorder the Books
查看>>
RabbitMQ各种交换机类型Exchange Types介绍
查看>>
Unhandled event loop exception No more handles
查看>>
JAVA基础补漏---数组
查看>>
关于字节对齐的理解
查看>>
处理跨域的方式
查看>>
sqlplus中break命令的使用
查看>>
由于SVN导致桌面图标都带有?标记
查看>>
C++容器在遍历时的删除问题
查看>>
C#编程语言与面向对象——类与对象
查看>>