zoj3204:

最小生成树,要求最小字典序的解。

用kruscal算法,先排序,输出的时候也要排序。

  1. /*
  2. zoj3204
  3.  
  4. 解题思路:
  5. 赤裸裸的最小生成树。只是要求输出字典序最小的连接方案。
  6. 所以在边的排序时要注意了,有可能存在边的权值是相同的边。
  7. 所以在这种情况下,要按他们的顶点序列排序。直接把STL搬上了,很好很强大。 */
  8. #include<iostream>
  9. #include<cstdio>
  10. #include<iostream>
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <cstdio>
  14. #include <cstring>
  15. #include<cmath>
  16. #include<algorithm>
  17. using namespace std;//这句写的时候千万别丢,不然许多函数无法使用
  18. const int MAX=;
  19. struct Node{
  20. int from, to;
  21. int w;
  22.  
  23. }edge[MAX*MAX];//记录读取时边的端点和权值
  24.  
  25. Node ans[MAX*MAX];//记录构成最小生成树里面的边 (边端点)
  26. int n;//点的个数
  27. int fa[MAX];// 并查集的
  28. int tol;//记录最小生成树边的个数
  29. int cnt;//记录ans里的边的个数
  30. void addedge(int u ,int v,int w){
  31. edge[tol].from=u;
  32. edge[tol].to=v;
  33. edge[tol].w=w;
  34. tol++;
  35.  
  36. }//添加边额操作
  37. void makeset(){
  38. for(int i=;i<=n;i++){
  39. fa[i]=i;
  40.  
  41. }
  42.  
  43. }//并查集的初始化 ,也可以直接初始化为-1
  44. int Find(int x){
  45. while(x!=fa[x])
  46. x=fa[x];
  47. return x;
  48. }//并查集的查找操作
  49. void uion(int x,int y){
  50. int a=Find(x);
  51. int b=Find(y);
  52. if(a!=b){
  53. ans[cnt].from=x;
  54. ans[cnt].to=y;
  55. cnt++;
  56. fa[a]=b;
  57. }
  58.  
  59. }//并查集的合并操作
  60. int cmp1(Node a,Node b){
  61. if(a.w!=b.w)return a.w<b.w;
  62. else {if(a.from==b.from)
  63.  
  64. return a.to<b.to;
  65. else
  66. return a.from<b.from;
  67. }
  68. }//比较器首先按w从小到大排序,若w相等,则依次按照from,to进行排序 ,这是给边排序
  69. int cmp2(Node a,Node b){
  70.  
  71. if(a.from!=b.from)return a.from<b.from;
  72. else
  73. return a.to<b.to;
  74. }//这个比较器主要是给ans里面的边排序,使其按照要求输出
  75. int main(){
  76. int t;
  77. scanf("%d",&t);
  78. while(t--){
  79. scanf("%d",&n);
  80. tol=;
  81. cnt=;//一定要在该处初始化tol,cnt否则会报超时的错误
  82. makeset();
  83. int d;
  84. for(int i=;i<=n;i++){
  85.  
  86. for(int j=;j<=n;j++){
  87. scanf("%d",&d);
  88. if(j<=i)continue;
  89. if(d==)continue;//这样读取会使避免重边的影响
  90. addedge(i,j,d);//前面的d会被后面的覆盖
  91.  
  92. }
  93. }
  94. sort(edge,edge+tol,cmp1);//排序
  95. for(int i=;i<tol;i++)
  96. uion(edge[i].from,edge[i].to);
  97.  
  98. sort(ans,ans+cnt,cmp2);
  99. if(cnt!=n-){
  100. printf("-1\n");
  101. continue;}//这一步很重要,是判断能不能形成最小生成树的
  102. else{
  103.  
  104. for(int i=;i<cnt-;i++){
  105. printf("%d %d ",ans[i].from,ans[i].to);//注意题目给出的输出格式
  106. }
  107. printf("%d %d\n",ans[cnt-].from,ans[cnt-].to);
  108.  
  109. }
  110. }
  111.  
  112. }

Connect them的更多相关文章

  1. Connect() 2016 大会的主题 ---微软大法好

    文章首发于微信公众号"dotnet跨平台",欢迎关注,可以扫页面左面的二维码. 今年 Connect 大会的主题是 Big possibilities. Bold technolo ...

  2. IdentityServer4 使用OpenID Connect添加用户身份验证

    使用IdentityServer4 实现OpenID Connect服务端,添加用户身份验证.客户端调用,实现授权. IdentityServer4 目前已更新至1.0 版,在之前的文章中有所介绍.I ...

  3. 2003-Can't connect to mysql server on localhost (10061)

    mysql数据库出现2003-Can't connect to mysql server on localhost (10061)问题 解决办法:查看wampserver服务器是否启动,如果没有启动启 ...

  4. Error connecting to database [Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)]

    参照 http://stackoverflow.com/questions/4448467/cant-connect-to-local-mysql-server-through-socket-var- ...

  5. HTTP Method详细解读(`GET` `HEAD` `POST` `OPTIONS` `PUT` `DELETE` `TRACE` `CONNECT`)

    前言 HTTP Method的历史: HTTP 0.9 这个版本只有GET方法 HTTP 1.0 这个版本有GET HEAD POST这三个方法 HTTP 1.1 这个版本是当前版本,包含GET HE ...

  6. IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API

    IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...

  7. Connect to the DSP on C6A8168/DM8168/DM8148 using CCS

    转自ti-wiki  这份wiki,我曾经就收藏过,但是没有加以重视,以至于绕了一大圈的ccs开发环境的配置,现在正式收藏于自己的博客中...总结良多啊 Connecting to DSP on C6 ...

  8. Action.c(58): Error -27796: Failed to connect to server "hostname"

    分析: 因为负载生成器的性能太好发数据特别快,服务器响应也特别快,从而导致负载生成器的端口在没有timeout之前就全部占满了. 解决方案一:   在负载生成器的注册表HKEY_LOCAL_MACHI ...

  9. VNC connect:Connection refused(10061)

    在Windows机器上使用VNC Viewer访问Linux服务器,有时候会遇到"connect:Connection refused(10061)"这个错误,导致这个错误出现的原 ...

  10. Oracle Connect by与递归with

    层次查询 select * from emp; select empno, ename, job, mgr, sal, deptno,level lv, sys_connect_by_path(ena ...

随机推荐

  1. AFNetWorking源码详解(二)

    来源:Yuzeyang 链接:http://zeeyang.com/2016/03/15/AFNetWorking-two/ AFHTTPSessionManager继承于AFURLSessionMa ...

  2. Java基础知识强化之集合框架笔记63:Map集合之HashMap嵌套ArrayList

    1. ArrayList集合嵌套HashMap集合并遍历. 需求:假设ArrayList集合的元素是HashMap.有3个.每一个HashMap集合的键和值都是字符串.元素我已经完成,请遍历. 结果: ...

  3. Redis Windows版安装及简单使用

    1.Redis简介及优势 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. 特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次 ...

  4. 一个操作Sql2005数据库的类(备份,还原,分离,附加,添加删除用户等操作)(转载)

    /* * 更新时间 :2011-09-01 16:06 * 更 新 人 :苏飞 */ using System; using System.Collections.Generic; using Sys ...

  5. python基础(目录)

    1.数据库操作入门 2.网络编程入门 3.编码规范 4.测试

  6. PAT_1010 一元多项式求导

    题目描述: 设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为n*xn-1.) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...

  7. SVM对偶形式

    dual svm 对偶SVM linear SVM 可以用二次规划方法解 xn通过非线性转换变成zn SVM配合非线性特征转换 透过large-margin降低模型复杂度 透过特征转换得到弯弯曲曲的边 ...

  8. 24种设计模式--抽象工厂模式【Abstract Factory Pattern】

    女娲造人,人是造出来了,世界是热闹了,可是低头一看,都是清一色的类型,缺少关爱.仇恨.喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍脑袋,忘记给人类定义性别了,那怎么办?抹掉重来,然后就把人类 ...

  9. MVVM模式应用 之NotificationObject类

    public abstract class NotificationObject : INotifyPropertyChanged {     public event PropertyChanged ...

  10. 关于Zen Coding:css,html缩写

    zen coding 是一个俄罗斯人写的编辑器(支持大部分现下流行的编辑器)插件,其安装也是非常简单,只要安装插件,然后在项目中拷贝js文件就可以.像Webstorm6.0.2中已经包含这样的插件.什 ...