ZOJ 3204 Connect them 继续MST

2014-11-24 03:26:00 · 作者: · 浏览: 0

题目大意:

让你求最小生成树,并且按照字典序输出哪些点连接。无解输出-1

这里的字典序定义为:(不翻译啦~,详见我的比较函数)

A solution A is a line of p integers: a1, a2, ...ap.
Another solution B different from A is a line of q integers: b1, b2, ...bq.
A is lexicographically smaller than B if and only if:
(1) there exists a positive integer r (r <= p, r <= q) such that ai = bi for all 0 < i < r and ar < br
OR
(2) p < q and ai = bi for all 0 < i <= p

思路:

进行kruskal之前排一次序,保证算法选择的边字典序小。

然后输出的时候也要排一次序。

什么时候无解?MST需要N-1条边才能连接所有顶点,所以你就看看边的条数呗。

#include
  
   
#include
   
     using namespace std; const int MAXN=120; const int INF=100000+10; int fa[MAXN]; int n; struct data { int x,y; int dis; }a[MAXN*MAXN],ans[MAXN]; bool operator< (const data& c,const data &d) { if(c.dis