POJ2377最大生成树

题意:求最大生成树

分析:把边权值变成负值,最后取绝对值,注意最后的判断,如果生成树的边的数目小于(顶点数-1)则表示不能构成生成树

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <string>
 5 #include <vector>
 6 #include <algorithm>
 7 #include <set>
 8 #include <map>
 9 #include <bitset>
10 #include <cmath>
11 #include <queue>
12 #include <stack>
13 using namespace std;
14 const int maxn=20020;
15 int  par[maxn],rankl[maxn];
16
17 void init(int n)
18 {
19     for(int i=0;i<=n;i++)
20     {
21         par[i]=i;
22         rankl[i]=0;
23     }
24 }
25 int findl(int x)
26 {
27     if(par[x]==x)
28         return x;
29     else
30         return par[x]=findl(par[x]);
31 }
32 void unite(int x,int y)
33 {
34     x=findl(x);
35     y=findl(y);
36     if(x==y)  return;
37     if(rankl[x]<rankl[y]){
38         par[x]=y;
39     }else{
40         par[y]=x;
41         if(rankl[x]==rankl[y])   rankl[x]++;
42     }
43 }
44 bool same(int x,int y)
45 {
46     return findl(x)==findl(y);
47 }
48 int n,m;
49 struct edge{
50     int u,v,cost;
51 };
52 bool cmp(const edge e1,const edge e2){
53     return e1.cost<e2.cost;
54 }
55 edge es[maxn];
56 int ans;
57 int kruskal()
58 {
59     sort(es,es+m+1,cmp);
60     init(n);
61     int res=0;
62     for(int i=0;i<m;i++){
63         edge e=es[i];
64         if(!same(e.u,e.v)){
65             unite(e.u,e.v);
66             res+=e.cost;
67             ans++;
68         }
69     }
70     return res;
71 }
72 int main()
73 {
74     while(cin>>n>>m)
75     {
76         for(int i=0;i<m;i++)
77         {
78             int a,b,c;
79             scanf("%d%d%d",&a,&b,&c);
80             es[i].u=a,es[i].v=b,es[i].cost=-c;
81         }
82         ans=0;
83         int cnt=0-kruskal();
84     //    cout<<ans<<endl;
85         if(ans==n-1)
86         cout<<cnt<<endl;
87         else
88         cout<<"-1"<<endl;
89     }
90     return 0;
91 }

时间: 2024-10-12 20:23:24

POJ2377最大生成树的相关文章

[POJ2377]Bad Cowtractors(最大生成树,Kruskal)

题目链接:http://poj.org/problem?id=2377 于是就找了一道最大生成树的AC了一下,注意不连通的情况啊,WA了一次. 1 /* 2 ━━━━━┒ギリギリ♂ eye! 3 ┓┏┓┏┓┃キリキリ♂ mind! 4 ┛┗┛┗┛┃\○/ 5 ┓┏┓┏┓┃ / 6 ┛┗┛┗┛┃ノ) 7 ┓┏┓┏┓┃ 8 ┛┗┛┗┛┃ 9 ┓┏┓┏┓┃ 10 ┛┗┛┗┛┃ 11 ┓┏┓┏┓┃ 12 ┛┗┛┗┛┃ 13 ┓┏┓┏┓┃ 14 ┃┃┃┃┃┃ 15 ┻┻┻┻┻┻ 16 */ 17 #inc

POJ2377 Bad Cowtractors【Kruskal】【求最大生成树】

Bad Cowtractors Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10933 Accepted: 4614 Description Bessie has been hired to build a cheap internet network among Farmer John's N (2 <= N <= 1,000) barns that are conveniently numbered 1..N. FJ

POJ2377 Bad Cowtractors 【最大生成树】

Bad Cowtractors Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10885   Accepted: 4586 Description Bessie has been hired to build a cheap internet network among Farmer John's N (2 <= N <= 1,000) barns that are conveniently numbered 1..N

实验 快速生成树配置

[实验名称] 快速生成树协议 RSTP 的配置. [实验目的] 理解快速生成树协议 RSTP 的工作原理,掌握如何在交换机上配置快速生成树. [背景描述] 某学校为了开展计算机教学和网络办公,建立了一个计算机教室和一个校办公区,这两 处的计算机网络通过两台交换机互连组成内部校园网,为了提高网络的可靠性,网络管理员 用 2 条链路将交换机互连,现要在交换机上做适当配置,使网络避免环路. [需求分析] 两台交换机以双链路互联,需要在启用 RSTP 避免环路的同时,提供链路的冗余备份功 能. [实验拓

STP生成树协议的分析总结

一,STP概述 STP(Spanning Tree Protocol,生成树协议)是有应用于交换机之间的防环的.功能是用来防环的. 基本原理: 通过在交换机之间传递一种特殊的协议报文,网桥协议数据单元(BPDU),来确定网络的拓扑结构.BPDU有两种,一种是配置BPDU(configuration BPDU),一种TC BPDU(拓扑变更BPDU). 前者是用于计算无环的生成树的:后者是用于在二层网络拓扑发生变化时产生用来缩短MAC表项的刷新时间的(由默认的300s--->15s) 分类: ST

生成树的基本调整

1.调整vlan的优先级:switch<config># spanning vlan X priority Y       将vlan X的优先级调整为Y,Y是4096的倍数 2.实施端口快速即portfast: 通常情况下,如果生成树中端口状态发生改变,引起生成树从新计算,那么需要大约30s收敛,这是不能承受的. 所以,我们要在连接主机的端口上实施portfast以保证生成树的稳定,它跳过了端口从LIS到LRN,LRN到FWD的过程,收敛速度很快 具体操作有两种,第一种:在所有需要的接口上单

UVa 1395 苗条的生成树(Kruskal+并查集)

https://vjudge.net/problem/UVA-1395 题意: 给出一个n结点的图,求苗条度(最大边减最小边的值)尽量小的生成树. 思路: 主要还是克鲁斯卡尔算法,先仍是按权值排序,对于一个连续的边集区间[L,R],如果这些边使得n个点全部连通,则一定存在一个苗条度不超过W[R]-W[L]的生成树.从小到大枚举L,对于每个L,从小到大枚举R. 这道题目我一直超时,最后发现数组开小了,我一直以为数组开小了肯定会出来Runtime error的... 1 #include<iostr

POJ 1679 The Unique MST(次短生成树)

Language: Default The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 29098   Accepted: 10404 Description Given a connected undirected graph, tell if its minimum spanning tree is unique. Definition 1 (Spanning Tree): Consider

【bzoj 2467】[中山市选2010]生成树(数论--排列组合)

题目:有一种图形叫做五角形圈.一个五角形圈的中心有1个由n个顶点和n条边组成的圈.在中心的这个n边圈的每一条边同时也是某一个五角形的一条边,一共有n个不同的五角形.这些五角形只在五角形圈的中心的圈上有公共的顶点.现在给定一个n五角形圈,你的任务就是求出n五角形圈的不同生成树的数目.还记得什么是图的生成树吗?一个图的生成树是保留原图的所有顶点以及顶点的数目减去一这么多条边,从而生成的一棵树.注意:在给定的n五角形圈中所有顶点均视为不同的顶点. 解法:题目是问使这 N 五角形圈生成树的种数.而生成树