POJ1358 Agri-Net
就是裸的最小生成树,复习一下。
prim算法:
G=(V,E),V是点集,E是边集
假设T=(U,TE)是最小生成树。U,TE初始化为空
首先从V中任取一点 假设取V1,然后U={V1},只要U是V的真子集,就从那些一个端点在T中,一个端点在T外的边中,找一条最短边。一直下去,直到找到n-1条边
找边使用 堆优化,复杂度(ElogV) 邻接表复杂度(V2)
#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
const int maxn=;
const int inf=0x3f3f3f3f; struct node{
int v,dis;
node(){}
node(int _v,int _dis){
v=_v;
dis=_dis;
}
bool operator<(const node &b) const {
return dis>b.dis;
}
}; int n,dis[maxn];
vector<node> G[maxn];
bool vis[maxn]; void prim() {
int ans=,num=;
priority_queue<node> pq;
for(int i=;i<n;i++) {
vis[i]=false;
dis[i]=inf;
}
pq.push(node(,));
node f;
while(num<n&&!pq.empty()) {
do{
f=pq.top();
pq.pop();
}while(vis[f.v]&&!pq.empty());
if(!vis[f.v]) {
ans+=f.dis;
vis[f.v]=true;
num++;
for(int i=;i<G[f.v].size();i++) {
int v=G[f.v][i].v;
if(!vis[v]) {
if(dis[v]>G[f.v][i].dis) {
dis[v]=G[f.v][i].dis;
pq.push(node(v,dis[v]));
}
}
}
}
}
if(num<n) printf("-1\n");//因为这里记录的是点的个数。不是边
else printf("%d\n",ans);
} int main() {
while(~scanf("%d",&n)) {
memset(G,,sizeof(G));
for(int i=;i<n;i++) {
for(int j=;j<n;j++) {
int x;
scanf("%d",&x);
if(x) G[i].push_back(node(j,x));
}
}
prim();
}
}
krusual算法:
将图G中的边按权值从小到大选取,使选取的不与生成树构成回路。直到n-1条边为止
判断回路就用并查集搞一下。
#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
const int inf=0x3f3f3f3f; int n;
struct Edge{
int u,v,dis;
Edge(){}
Edge(int _u,int _v,int _dis) {
u=_u;
v=_v;
dis=_dis;
}
bool operator <(const Edge &b) const {
return dis<b.dis;
}
}; vector<Edge> edge; int fa[maxn]; int Find(int x) {
if(fa[x]==-) return x;
else return fa[x]=Find(fa[x]);
} void Union(int x,int y) {
int fx=Find(x);
int fy=Find(y);
if(fx!=fy) {
fa[fx]=fy;
}
} int main() {
while(~scanf("%d",&n)) {
memset(fa,-,sizeof(fa));
edge.clear();
for(int i=;i<n;i++) {
for(int j=;j<n;j++) {
int x;
scanf("%d",&x);
if(x&&j<i) edge.push_back(Edge(i,j,x));
}
}
sort(edge.begin(),edge.end());
int num=,ans=;
for(int i=;i<edge.size();i++) {
int u=edge[i].u,v=edge[i].v,dis=edge[i].dis;
if(Find(u)!=Find(v)) {
num++;
ans+=dis;
Union(u,v);
}
}
if(num==n-) printf("%d\n",ans);
else printf("-1\n");
}
}
POJ1358 Agri-Net的更多相关文章
- Agri Net POJ1258 && Constructing Roads POJ2421
题意,在给出的图中,使用最小花费的边,使这个图仍然连通. #include <cstdio> #include <algorithm> #include <cstring ...
- UI中经常出现的下拉框下拉自动筛选效果的实现
小需求是当你在第一个下拉框选择了国家时,会自动更新第二个省份的下拉框,效果如下 两个下拉选择Html如下: <select id="country_select"> & ...
- 告别无止境的增删改查:Java代码生成器
对于一个比较大的业务系统,我们总是无止境的增加,删除,修改,粘贴,复制,想想总让人产生一种抗拒的心里.那有什么办法可以在正常的开发进度下自动生成一些类,配置文件,或者接口呢? 有感于马上要做个比较 ...
- A过的题目
1.TreeMap和TreeSet类:A - Language of FatMouse ZOJ1109B - For Fans of Statistics URAL 1613 C - Hardwood ...
- 告别无止境的增删改查--Java代码生成器
转自:http://www.cnblogs.com/zhuYears/archive/2012/02/29/2373491.html 告别无止境的增删改查--Java代码生成器 有感于马上要做个比较大 ...
- 网络-05-端口号-F5-负载均衡设-linux端口详解大全--TCP注册端口号大全备
[root@test1:Standby] config # [root@test1:Standby] config # [root@test1:Standby] config # [root@test ...
- Mybatis中 Integer 值为0时,默认为空字符串的解决办法。
需求是查询级别为0的用户 User对象里的level字段的值为0,查询时居然没有查到为level为0的用户. <select id="selectSelective" par ...
- CentOS 7 服务端口表
# Note that it is presently the policy of IANA to assign a single well-known# port number for both T ...
- etymon word air aero aeri aer ag agreement walk joint trick skill chief forget out~1
1● air 2● aero 3● aeri 4● aer 空气 充气 1● ag 做,代理做 =====>agency 1● agr 2● agri 3 ...
随机推荐
- Navigator - BOM对象
Navigator 对象 Navigator 对象包含有关浏览器的信息. 注释:没有应用于 navigator 对象的公开标准,不过所有浏览器都支持该对象. Navigator 对象集合 集合 描述 ...
- google/dense_hash_map
这个库使用时需要注意的地方: 1.在插入数据之前,需要先调用set_empty_key()设置一个空Key,Key的值可以为任意符合类型的.但请注意之后插入的Key不能和空Key相同,否则会abort ...
- SpringBoot RestController 同时支持返回xml和json格式数据
@RestController 默认支持返回json格式数据,即使不做任何配置也能返回json数据 当接口需要支持xml或json两种格式数据时应该怎么做呢? 只要引入 Jackson xml的 ma ...
- 2014蓝桥杯B组初赛试题《六角填数》
题目描述: 如图[1.png]所示六角形中,填入1~12的数字. 使得每条直线上的数字之和都相同. 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少? 请通过浏览器提交 ...
- open source libraries: BIAS
The Basic Image AlgorithmS C/C++ Library (BIAS) is the code base for research and software developme ...
- SpringMVC——概述
Spring 为展现层提供的基于 MVC 设计理念的优秀的Web 框架,是目前最主流的 MVC 框架之一 Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架 Spring MV ...
- SimpleTag——认识自定义标签
自定义标签 自定义标签的开发与应用步骤 编写完成标签功能的 Java 类(标签处理器) 编写标签库描述(tld)文件,在tld文件中对自定义中进行描述 在 JSP 页面中导入和使用自定义标签 ①. 创 ...
- HDU 4118 Holiday's Accommodation (dfs)
题意:给n个点,每个点有一个人,有n-1条有权值的边,求所有人不在原来位置所移动的距离的和最大值. 析:对于每边条,我们可以这么考虑,它的左右两边的点数最少的就是要加的数目,因为最好的情况就是左边到右 ...
- Daubechies Wavelet
The Daubechies wavelets, based on the work of Ingrid Daubechies, are a family of orthogonal wavelets ...
- 编写高质量代码改善C#程序的157个建议——建议26:使用匿名类型存储LINQ查询结果
建议26:使用匿名类型存储LINQ查询结果 从.NET3.0开始,C#开始支持一个新特性:匿名类型.匿名类型有var.赋值运算符和一个非空初始值(或以new开头的初始化项)组成.匿名类型有如下基本特性 ...