题目大意:
让你求最小生成树,并且按照字典序输出哪些点连接。无解输出-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