ZOJ 3204 Connect them 继续MST
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相关推荐
- zoj 3204 Connect them kruskal
kruskal模板题 #include <iostream> #include <cstdio> #include <algorithm> #define MAX ...
- 浙江省第6届程序设计竞赛结题报告汇总 zoj3202-3212
zoj 3202 Second-price Auction 水题,不解释了,直接贴代码 #include<cstdio> #include<cstring> #include& ...
- 域用户区别控添加计算机和,WinServer-AD域控入门
计算机账户和用户账户的区别 域控中不需要事先建立计算机账户,但必须建立登录用户账户. 计算机只要知道域控管理员或者授权管理账户,就可以利用此账户为所有计算机加域. 计算机加域成功之后,都会在AD管理里 ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- 【转】并查集MST题集
转自:http://blog.csdn.net/shahdza/article/details/7779230 [HDU] 1213 How Many Tables 基础并查集★ 1272 小希的迷宫 ...
- BZOJ 3479: [Usaco2014 Mar]Watering the Fields( MST )
MST...一开始没注意-1结果就WA了... ---------------------------------------------------------------------------- ...
- ZOJ 1015 弦图判定
一些定义: 弦图是一种特殊图:它的所有极小环都只有3个顶点. 单纯点:该顶点与其邻接点在原图中的导出子图是一个完全图. 图G的完美消去序列:一个顶点序列a1a2a3...an,使得对于每个元素ai,a ...
- `Computer-Algorithm` 最小生成树MST,Prim,Kruskal,次小生成树
Contents 最小生成树 Algorithm Prim Code Kruskal Prim&KruskalPrim \& KruskalPrim&Kruskal算法的性质 ...
- NOIP 好题推荐(DP+搜索+图论)POJ ZOJ
NOIP好题推荐(DP+搜索+图论)POJ ZOJ 1370 Gossiping (数论->模线性方程有无解的判断)+(图论->DFS) 1090 Chain ->格雷码和二进制码 ...
最新文章
- IASetIndexBuffer Offset
- 20172307 2018-2019-1 《程序设计与数据结构》第4周学习总结
- mysql 启动 failed to start_Linux下启动MySQL提示“mysql deamon failed to start”错误的解决办法...
- 学python数学要好吗_学习Python数学英语基础重要吗?
- es每次结果不一样_电子血压计不准!每次测血压都不一样……
- 黑马程序员—java基础总结1
- 在sql当中为了让数据做缓存做with as的操作
- 2020 WTM 继续向前
- wireshark-win64-3.4.0安装_这9类轴承的安装方法,你可都知道?有哪些需要注意的呢?...
- Spring框架学习3:bean元素属性
- ubuntu下安装 memecache
- 苹果发布会日期再曝光 2019新iPhone发布会定在这一天?
- linux 迁移mysql目录_linux默认mysql迁移目录
- 华东师大计算机全国排名,华东师范大学就这水平进的985?
- bilibili校招题目——扭蛋机
- 面试答案-简单回答k8s容器启动的过程
- 计算机课程体系改革,试论改革教学内容和考试方式构建计算机公共课程体系
- 七星彩长奖表图_新版够力七星彩奖表
- oracle natural join qualifier,自然连接(natural join)
- 高通开发系列 - Voice Call之语音通话流程和问题分析