http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3367

题目大意:

让你求最小生成树,并且按照字典序输出哪些点连接。无解输出-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<cstdio>
#include<algorithm>
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<d.dis)return true;else if(c.dis==d.dis)return c.x<d.x || c.x==d.x && c.y < d.y ;return false;
}int find(int cur)
{return cur==fa[cur]? cur:fa[cur]=find(fa[cur]);
}int main()
{int T;scanf("%d",&T);while(T--){scanf("%d",&n);int len=0;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){scanf("%d",&a[len].dis);if(a[len].dis==0)continue;a[len].x=i;a[len].y=j;len++;}sort(a,a+len);              //保证kruskal的选边是按字典序来的for(int i=1;i<=n;i++)fa[i]=i;int lena=0;for(int i=0;i<len;i++){int rootx=find(a[i].x);int rooty=find(a[i].y);if(rootx!=rooty){fa[rootx]=rooty;ans[lena].x=a[i].x;ans[lena].dis=0;      //因为懒得在写比较函数,所以直接设为一样的吧ans[lena++].y=a[i].y;}}if(n-1!=lena)         //MST性质,肯定要n-1条边才能连接所有点{printf("-1\n");continue;}sort(ans,ans+lena); //保证输出边也是按字典序来的for(int i=0;i<lena;i++){if(i!=0)printf(" ");printf("%d %d",ans[i].x,ans[i].y);}printf("\n");}return 0;
}

转载于:https://www.cnblogs.com/murmured/p/5004185.html

ZOJ 3204 Connect them 继续MST相关推荐

  1. zoj 3204 Connect them kruskal

    kruskal模板题 #include <iostream> #include <cstdio> #include <algorithm> #define MAX ...

  2. 浙江省第6届程序设计竞赛结题报告汇总 zoj3202-3212

    zoj 3202 Second-price Auction 水题,不解释了,直接贴代码 #include<cstdio> #include<cstring> #include& ...

  3. 域用户区别控添加计算机和,WinServer-AD域控入门

    计算机账户和用户账户的区别 域控中不需要事先建立计算机账户,但必须建立登录用户账户. 计算机只要知道域控管理员或者授权管理账户,就可以利用此账户为所有计算机加域. 计算机加域成功之后,都会在AD管理里 ...

  4. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  5. 【转】并查集MST题集

    转自:http://blog.csdn.net/shahdza/article/details/7779230 [HDU] 1213 How Many Tables 基础并查集★ 1272 小希的迷宫 ...

  6. BZOJ 3479: [Usaco2014 Mar]Watering the Fields( MST )

    MST...一开始没注意-1结果就WA了... ---------------------------------------------------------------------------- ...

  7. ZOJ 1015 弦图判定

    一些定义: 弦图是一种特殊图:它的所有极小环都只有3个顶点. 单纯点:该顶点与其邻接点在原图中的导出子图是一个完全图. 图G的完美消去序列:一个顶点序列a1a2a3...an,使得对于每个元素ai,a ...

  8. `Computer-Algorithm` 最小生成树MST,Prim,Kruskal,次小生成树

    Contents 最小生成树 Algorithm Prim Code Kruskal Prim&KruskalPrim \& KruskalPrim&Kruskal算法的性质 ...

  9. NOIP 好题推荐(DP+搜索+图论)POJ ZOJ

    NOIP好题推荐(DP+搜索+图论)POJ ZOJ 1370 Gossiping (数论->模线性方程有无解的判断)+(图论->DFS)  1090 Chain ->格雷码和二进制码 ...

最新文章

  1. IASetIndexBuffer Offset
  2. 20172307 2018-2019-1 《程序设计与数据结构》第4周学习总结
  3. mysql 启动 failed to start_Linux下启动MySQL提示“mysql deamon failed to start”错误的解决办法...
  4. 学python数学要好吗_学习Python数学英语基础重要吗?
  5. es每次结果不一样_电子血压计不准!每次测血压都不一样……
  6. 黑马程序员—java基础总结1
  7. 在sql当中为了让数据做缓存做with as的操作
  8. 2020 WTM 继续向前
  9. wireshark-win64-3.4.0安装_这9类轴承的安装方法,你可都知道?有哪些需要注意的呢?...
  10. Spring框架学习3:bean元素属性
  11. ubuntu下安装 memecache
  12. 苹果发布会日期再曝光 2019新iPhone发布会定在这一天?
  13. linux 迁移mysql目录_linux默认mysql迁移目录
  14. 华东师大计算机全国排名,华东师范大学就这水平进的985?
  15. bilibili校招题目——扭蛋机
  16. 面试答案-简单回答k8s容器启动的过程
  17. 计算机课程体系改革,试论改革教学内容和考试方式构建计算机公共课程体系
  18. 七星彩长奖表图_新版够力七星彩奖表
  19. oracle natural join qualifier,自然连接(natural join)
  20. 高通开发系列 - Voice Call之语音通话流程和问题分析

热门文章

  1. python画图代码的输入数据可以取出来_用Python写了个小程序:最小二乘法、读取文件、作图以及数据输出到文件...
  2. python中Numpy中的替代值
  3. JS基础02之流程控制语句
  4. 差分隐私与可穿戴式设备调查【笔记】
  5. Python--给数字前固定位数加零
  6. 搞懂多维高斯分布的由来
  7. 全概公式和贝叶斯公式的理解及例题
  8. Oracle维护数据完整性——约束
  9. python进程池一个进程卡住_python进程池,每个进程都有超时
  10. linux系统如何创建python文件_请问linux下如何创建pycharm的快捷方式?