生活真是奇妙的东西,这样的题目居然能被联想到这样的算法,只能说智商不够啊。
这道题目的意思不解释了,月赛的时候我队友已经想出来了做法,但是我们最后还是没A。
题解:
1。首先将所有能连接的球连接起来,然后看这个图有几个连通分量,那最后就会剩下几个球,这个用并查集实现下就好了。
由于xi,yi坐标比较分散所以要用邻接表进行存储。
2. 接下来就是输出方案,本来我们是想考虑点的度的,后来发现实现起来有点困难,实际上只需要按照并查集的唯一的头,进行深度优先搜索,这样就形成了一颗深搜树,
然后再用叶子节点打他的根节点就可以了。这样一次能打掉所有叶子节点(简直神奇)。
3.一开始进行2次排序,进行点的连接。
#include#include #include #include using namespace std; int e,head[10005],root[10005],vis[10005]; struct node { int x,y; int nod,l; }s[10005],q[10005]; struct lj { int v; int next; }nn[10005]; int cmp1(struct node a,struct node b) { if(a.x==b.x) return a.y