06 2013 档案

摘要:每修好一台电脑后就逐一与之前修好的电脑进行距离计算,若距离小于等于d则加入同一集合。写的时候各种不认真,wa了好几次,应该好好批评下自己。 1 #include<cstdio> 2 #include<string.h> 3 #include<iostream> 4 #include<math.h> 5 const int maxn=1010; 6 int p[maxn],n,d,repair[maxn],k; 7 struct Node 8 { 9 double x,y;10 bool flag;11 }node[maxn];12 13 void 阅读全文
posted @ 2013-06-12 01:23 longlongago 阅读(188) 评论(0) 推荐(0)
摘要:poj1182是此题的加强版。若两人属于不同集合则他们所属帮派未知。若属于同一集合,设ra=find(a),若rank[a]==0,则a与ra为同一帮派,反之rank[a]==1,a与ra则分属于不同帮派。另外测下这组数据 1 2 1 A 1 2 答案应该是In different gangs.(在discuss里看到的)。 1 #include<cstdio> 2 #include<string.h> 3 #include<iostream> 4 using namespace std; 5 const int maxn=100001; 6 int p[m 阅读全文
posted @ 2013-06-10 19:43 longlongago 阅读(122) 评论(0) 推荐(0)
摘要:并查集的基础题。在加入边前检查两点之前是否是同一个集合,若是则不是一棵树。输入完后检查是否所有点属于同一个集合。 1 #include<cstdio> 2 #include<string.h> 3 #include<iostream> 4 using namespace std; 5 const int maxn=1<<15; 6 bool flag,vis[maxn]; 7 int p[maxn],rank[maxn],data[maxn],m; 8 int a,b,ra,rb; 9 10 int find(int x)11 {12 if(x! 阅读全文
posted @ 2013-06-10 18:38 longlongago 阅读(108) 评论(0) 推荐(0)
摘要:并查集的基础题。总共n个人,有m组人有相同信仰。问这些人中存在的信仰最多有多少种。 1 #include<cstdio> 2 #include<string.h> 3 #include<iostream> 4 using namespace std; 5 const int maxn=50001; 6 int p[maxn],rank[maxn]; 7 bool vis[maxn]; 8 9 int find(int v)10 {11 if(p[v]==v)12 return v;13 else14 {15 p[v]=find(p[v]);16... 阅读全文
posted @ 2013-06-03 11:47 longlongago 阅读(123) 评论(0) 推荐(0)