最小生成树 TOJ 4117 Happy tree friends
链接http://acm.tju.edu.cn/toj/showp4117.html
4117. Happy tree friends
Time Limit: 1.0 Seconds Memory Limit: 65536K
Total Runs: 164 Accepted Runs: 60
yuebai has an undirected complete graph with n vertices. He wants to know the minimum spanning tree of the graph. It's so easy, so yuebai wants to challenge himself. He will choose one edge which must be
in the spanning tree.
INPUT
There are multiple test cases.
For each test case, the first line contain an integer n.
In the next n lines,
there is an adjacency matrix M. Mij denotes
the weight of the edge i to j.
Next line contains two dinstinct integer u and v,
which denotes the edge which is from u to v with
the value Muv must
be in the spanning tree.
(2≤n≤100,0≤Mij≤100). Mij=0 if
and only if i=j.
OUTPUT
For each case, print the result.
Sample Input
3
0 2 3
1 0 4
5 10 0
2 3
Sample Output
5
Hint
The edge of the spanning tree is 2->3 and 2->1
Source: TJU
Team Selection 2015 Round B
用Kruskal做
只要把题目中要求的边先合和起来,其余按照模版来,题目说了无向,所以对于每边的长度取矩阵中的最小值(真是坑,一开始以为是最小树形图)
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std; #define N 50005
int a[105][105];
struct graph{
int x,y,wei;
}nodd[N];
int m,n,ufind[N]; int cmp(graph a1,graph a2){
return a1.wei<a2.wei;
}
int find(int x){
return ufind[x]==x? x : ufind[x]=find(ufind[x]);
}
int Kruskal(int a,int b){
int ans=0;
int i,j;
for(i=1;i<=n;i++) ufind[i]=i;
sort(nodd,nodd+m,cmp);
ufind[a]=b;
for(i=0;i<m;i++){
int x=find(nodd[i].x); int y=find(nodd[i].y);
if(x!=y){
ans+=nodd[i].wei;
ufind[x]=y;
}
}
return ans;
} int main(){
int x;
int sum;
int temp;
int a1,a2;
int i,j,k;
while(scanf("%d",&x)!=EOF){
sum=0;
temp=0;
for(i=1;i<=x;i++)
for(j=1;j<=x;j++)
scanf("%d",&a[i][j]);
m=x*(x-1)/2;
n=x;
scanf("%d %d",&a1,&a2);
sum+=a[a1][a2];
a[a2][a1]=a[a1][a2];
for(i=1;i<=x;i++)
for(j=i+1;j<=x;j++){
nodd[temp].x=i; nodd[temp].y=j; nodd[temp].wei=min(a[i][j],a[j][i]);
temp++;
}
//for(i=0;i<temp;i++) printf("%d %d %d\n",nodd[i].x,nodd[i].y,nodd[i].wei);
printf("%d\n",Kruskal(a1,a2)+sum);
}
}
最小生成树 TOJ 4117 Happy tree friends的更多相关文章
- 说说最小生成树(Minimum Spanning Tree)
minimum spanning tree(MST) 最小生成树是连通无向带权图的一个子图,要求 能够连接图中的所有顶点.无环.路径的权重和为所有路径中最小的. graph-cut 对图的一个切割或者 ...
- [bzoj1016][JSOI2008]最小生成树计数 (Kruskal + Matrix Tree 定理)
Description 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的 ...
- 二分+最小生成树【bzoj2654】: tree
2654: tree 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. 二分答案,然后跑最小生成树判断. 注意优先跑白色边. code: ...
- prim算法查找最小生成树
我们在图的定义中说过,带有权值的图就是网结构.一个连通图的生成树是一个极小的连通子图,它含有图中全部的顶点,但只有足以构成一棵树的n-1条边.所谓的最小成本,就是n个顶点,用n-1条边把一个连通图连接 ...
- "《算法导论》之‘图’":最小生成树(无向图)
本文主要参考自<算法>. 加权图是一种为每条边关联一个权值或是成本的图模型.这种图能够自然地表示许多应用.在一幅航空图中,边表示航线,权值则可以表示距离或是费用.在一幅电路图中,边表示导线 ...
- 最小生成树之Kruskal(克鲁斯卡尔)算法
学习最小生成树算法之前我们先来了解下下面这些概念: 树(Tree):如果一个无向连通图中不存在回路,则这种图称为树. 生成树 (Spanning Tree):无向连通图G的一个子图如果是一颗包含G的所 ...
- 最小生成树 Prim算法 和 Kruskal算法,c++描述
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- 最小生成树之克鲁斯卡尔(Kruskal)算法
学习最小生成树算法之前我们先来了解下 下面这些概念: 树(Tree):如果一个无向连通图中不存在回路,则这种图称为树. 生成树 (Spanning Tree):无向连通图G的一个子图如果是一颗包含G的 ...
- 由最小生成树(MST)到并查集(UF)
背景 最小生成树(Minimum Spanning Tree)的算法中,克鲁斯卡尔算法(Kruskal's algorithm)是一种常用算法. 在克鲁斯卡尔算法中的一个关键问题是如何判断图中的两个点 ...
随机推荐
- 和spring cloud/boot 学习如何管理自己的组件
案例, 功能: 需要写一个往kafka上报数据的组建. 当组建启动时,需要建立如下资源: 1, 和kafka建立若干条连接 2, 启动一个线程池 3, 启动上报一个缓冲区 问题如下: 1, 如何在sp ...
- dos2unix和unix2dos
dos2unix将windows格式的文件转换为linux格式的文件. unix2dos将linux格式的文件转换为windows格式的文件. dos2unix和unix2dos会转换windows和 ...
- 《第一行代码 android》 读书笔记:找出当前界面对应的Activity
在android开发中找出当前界面对应的Activity,步骤如下: 新建一个BaseActivity继承自Activity,然后在BaseActivity中重写onCreate()方法,通过getC ...
- Image Style Transfer:多风格 TensorFlow 实现
·其实这是一个选修课的present,整理一下作为一篇博客,希望对你有用.讲解风格迁移的博客蛮多的,我就不过多的赘述了.讲一点几个关键的地方吧,当然最后的代码和ppt也希望对你有用. 1.引入: 风格 ...
- 为何要部署IPV6
·IPv4的局限性: 1.地址空间的局限性:IP地址空间的危机由来已久,并正是升级到IPv6的主要动力. 2.安全性:IPv4在网络层没有安全性可言,安全性一直被认为是由网络层以上的层负责. ...
- 跟面向对象卯上了,看看ES6的“类”
上回我们说到ES5的面向对象,以及被大家公认的最佳的寄生组合式继承.时代在进步,在ES6中对于面向对象这个大boss理所应当地进行了一次大改,从原先那种比较长的写法转变为"小清新" ...
- Linux socket 类封装 (面向对象方法)
/* * socketfactory.h * * Created on: 2014-7-19 * Author: root */ #ifndef SOCKETFACTORY_H_ #define SO ...
- Js比较对Object类型进行排序
<script> var data=[{name:"121",age:"18",year:"2018"},{name:" ...
- 机器学习之Adaboost (自适应增强)算法
注:本篇博文是根据其他优秀博文编写的,我只是对其改变了知识的排序,另外代码是<机器学习实战>中的.转载请标明出处及参考资料. 1 Adaboost 算法实现过程 1.1 什么是 Adabo ...
- Entity Framework——配置文件设置
可以使用配置文件或代码(EF6起)配置EF框架. 一.使用配置文件 安装Entity Framework自动生成的配置 当使用VS的NuGet自动安装Entity Framework(本文使用6.2. ...