#P851. 建路(road)
建路(road)
【问题描述】
收集完能量球的sherc因为拥有了巨大的能量,完全不怕即将到来的1000m跑,可是……学校还没有选好这些项目测试的位置!
这急坏了sherc和ConanQZ,~因为能量球的能量只能让今天跑过~~1000m~,为了让广大学生完成这次达标运动会,sherc和ConanQZ决定帮助学校。
这次达标运动会一共有n个项目,每个项目都有所在位置的坐标
(x,y),任意两个位置间建路的花费定义为**(x1-x2)^2+(y1-y2)^2**
学校希望建尽量少的路使得 任意两个位置间均有路可以到达 ,并且希望花费最小。
Sherc和ConanQZ了解后表示特别简单,可是又来了m个承包商,他们将提供m个套餐,每个套餐有一个花费c,如果买了这个套餐,那么套餐内包含的项目的位置会直接通过~黑科技~连接到一起。
为了让学校成功举办运动会,最小花费是多少呢?
注意:套餐内的项目连接到一起后,可以从任意一个项目的位置到另一个项目的位置。 【输入格式】 第一行两个整数 n,m。
接下来n行,每行有两个整数x,y。表示1~n项目的(x,y)坐标。
接下来m行,每行有2+k个整数c,k,a1,a2,……,ak.
c表示该套餐花费,k表示该套餐连接的项目数目,接下来k个数表示这些项目。(看不懂看样例)
【输出格式】road.in
一个整数,表示最小花费。
【样例输入】road.out
3 1
1 1
2 2
1000 1000
10 2 2 3
{花费10,连接了2个项目,他们是2,3}
【样例输出】
12
【样例解释】
买了第一个套餐【也只有一个】,2和3项目连接起来,然后给1和2项目之间建路,花费为1+1+10=12。
【数据范围】
对于30%的数据 n<=100 m<=3
对于100%的数据 n<=1000,m<=10,k<=n
对于100%的数据,x,y,c<=maxlongint
保证最后答案在int64****范围内