Connect them
zoj3204:
最小生成树,要求最小字典序的解。
用kruscal算法,先排序,输出的时候也要排序。
- /*
- zoj3204
- 解题思路:
- 赤裸裸的最小生成树。只是要求输出字典序最小的连接方案。
- 所以在边的排序时要注意了,有可能存在边的权值是相同的边。
- 所以在这种情况下,要按他们的顶点序列排序。直接把STL搬上了,很好很强大。 */
- #include<iostream>
- #include<cstdio>
- #include<iostream>
- #include <stdio.h>
- #include <stdlib.h>
- #include <cstdio>
- #include <cstring>
- #include<cmath>
- #include<algorithm>
- using namespace std;//这句写的时候千万别丢,不然许多函数无法使用
- const int MAX=;
- struct Node{
- int from, to;
- int w;
- }edge[MAX*MAX];//记录读取时边的端点和权值
- Node ans[MAX*MAX];//记录构成最小生成树里面的边 (边端点)
- int n;//点的个数
- int fa[MAX];// 并查集的
- int tol;//记录最小生成树边的个数
- int cnt;//记录ans里的边的个数
- void addedge(int u ,int v,int w){
- edge[tol].from=u;
- edge[tol].to=v;
- edge[tol].w=w;
- tol++;
- }//添加边额操作
- void makeset(){
- for(int i=;i<=n;i++){
- fa[i]=i;
- }
- }//并查集的初始化 ,也可以直接初始化为-1
- int Find(int x){
- while(x!=fa[x])
- x=fa[x];
- return x;
- }//并查集的查找操作
- void uion(int x,int y){
- int a=Find(x);
- int b=Find(y);
- if(a!=b){
- ans[cnt].from=x;
- ans[cnt].to=y;
- cnt++;
- fa[a]=b;
- }
- }//并查集的合并操作
- int cmp1(Node a,Node b){
- if(a.w!=b.w)return a.w<b.w;
- else {if(a.from==b.from)
- return a.to<b.to;
- else
- return a.from<b.from;
- }
- }//比较器首先按w从小到大排序,若w相等,则依次按照from,to进行排序 ,这是给边排序
- int cmp2(Node a,Node b){
- if(a.from!=b.from)return a.from<b.from;
- else
- return a.to<b.to;
- }//这个比较器主要是给ans里面的边排序,使其按照要求输出
- int main(){
- int t;
- scanf("%d",&t);
- while(t--){
- scanf("%d",&n);
- tol=;
- cnt=;//一定要在该处初始化tol,cnt否则会报超时的错误
- makeset();
- int d;
- for(int i=;i<=n;i++){
- for(int j=;j<=n;j++){
- scanf("%d",&d);
- if(j<=i)continue;
- if(d==)continue;//这样读取会使避免重边的影响
- addedge(i,j,d);//前面的d会被后面的覆盖
- }
- }
- sort(edge,edge+tol,cmp1);//排序
- for(int i=;i<tol;i++)
- uion(edge[i].from,edge[i].to);
- sort(ans,ans+cnt,cmp2);
- if(cnt!=n-){
- printf("-1\n");
- continue;}//这一步很重要,是判断能不能形成最小生成树的
- else{
- for(int i=;i<cnt-;i++){
- printf("%d %d ",ans[i].from,ans[i].to);//注意题目给出的输出格式
- }
- printf("%d %d\n",ans[cnt-].from,ans[cnt-].to);
- }
- }
- }
Connect them的更多相关文章
- Connect() 2016 大会的主题 ---微软大法好
文章首发于微信公众号"dotnet跨平台",欢迎关注,可以扫页面左面的二维码. 今年 Connect 大会的主题是 Big possibilities. Bold technolo ...
- IdentityServer4 使用OpenID Connect添加用户身份验证
使用IdentityServer4 实现OpenID Connect服务端,添加用户身份验证.客户端调用,实现授权. IdentityServer4 目前已更新至1.0 版,在之前的文章中有所介绍.I ...
- 2003-Can't connect to mysql server on localhost (10061)
mysql数据库出现2003-Can't connect to mysql server on localhost (10061)问题 解决办法:查看wampserver服务器是否启动,如果没有启动启 ...
- 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- ...
- 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 ...
- IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...
- Connect to the DSP on C6A8168/DM8168/DM8148 using CCS
转自ti-wiki 这份wiki,我曾经就收藏过,但是没有加以重视,以至于绕了一大圈的ccs开发环境的配置,现在正式收藏于自己的博客中...总结良多啊 Connecting to DSP on C6 ...
- Action.c(58): Error -27796: Failed to connect to server "hostname"
分析: 因为负载生成器的性能太好发数据特别快,服务器响应也特别快,从而导致负载生成器的端口在没有timeout之前就全部占满了. 解决方案一: 在负载生成器的注册表HKEY_LOCAL_MACHI ...
- VNC connect:Connection refused(10061)
在Windows机器上使用VNC Viewer访问Linux服务器,有时候会遇到"connect:Connection refused(10061)"这个错误,导致这个错误出现的原 ...
- Oracle Connect by与递归with
层次查询 select * from emp; select empno, ename, job, mgr, sal, deptno,level lv, sys_connect_by_path(ena ...
随机推荐
- AFNetWorking源码详解(二)
来源:Yuzeyang 链接:http://zeeyang.com/2016/03/15/AFNetWorking-two/ AFHTTPSessionManager继承于AFURLSessionMa ...
- Java基础知识强化之集合框架笔记63:Map集合之HashMap嵌套ArrayList
1. ArrayList集合嵌套HashMap集合并遍历. 需求:假设ArrayList集合的元素是HashMap.有3个.每一个HashMap集合的键和值都是字符串.元素我已经完成,请遍历. 结果: ...
- Redis Windows版安装及简单使用
1.Redis简介及优势 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. 特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次 ...
- 一个操作Sql2005数据库的类(备份,还原,分离,附加,添加删除用户等操作)(转载)
/* * 更新时间 :2011-09-01 16:06 * 更 新 人 :苏飞 */ using System; using System.Collections.Generic; using Sys ...
- python基础(目录)
1.数据库操作入门 2.网络编程入门 3.编码规范 4.测试
- PAT_1010 一元多项式求导
题目描述: 设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为n*xn-1.) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...
- SVM对偶形式
dual svm 对偶SVM linear SVM 可以用二次规划方法解 xn通过非线性转换变成zn SVM配合非线性特征转换 透过large-margin降低模型复杂度 透过特征转换得到弯弯曲曲的边 ...
- 24种设计模式--抽象工厂模式【Abstract Factory Pattern】
女娲造人,人是造出来了,世界是热闹了,可是低头一看,都是清一色的类型,缺少关爱.仇恨.喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍脑袋,忘记给人类定义性别了,那怎么办?抹掉重来,然后就把人类 ...
- MVVM模式应用 之NotificationObject类
public abstract class NotificationObject : INotifyPropertyChanged { public event PropertyChanged ...
- 关于Zen Coding:css,html缩写
zen coding 是一个俄罗斯人写的编辑器(支持大部分现下流行的编辑器)插件,其安装也是非常简单,只要安装插件,然后在项目中拷贝js文件就可以.像Webstorm6.0.2中已经包含这样的插件.什 ...