1578. 次小生成树初级练习题

☆   输入文件:mst2.in   输出文件:mst2.out   简单对比
时间限制:1 s   内存限制:256 MB

【题目描述】

求严格次小生成树

【输入格式】

第一行包含两个整数N 和M,表示无向图的点数与边数。 接下来 M行,每行 3个数x y z 表示,点 x 和点y之间有一条边,边的权值为z。

【输出格式】

包含一行,仅一个数,表示严格次小生成树的边权和。(数据保证必定存在严格次小生成树)

【样例输入】

5 6

1 2 1

1 3 2

2 4 3

3 5 4

3 4 3

4 5 6

【样例输出】

11

【提示】

数据中无向图无自环; 50% 的数据N≤2 000 M≤3 000; 80% 的数据N≤50 000 M≤100 000; 100% 的数据N≤100 000 M≤300 000 ,边权值非负且不超过 10^9 。

【来源】

bzoj。。。

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 300010
using namespace std;
int n,m,x,y,z,k,sum,tot,num,answer=N,fa[N],ans[N];
int read()
{
    ,f=; char ch=getchar();
    ; ch=getchar();}
    +ch-'; ch=getchar();}
    return x*f;
}
struct Edge
{
    int x,y,z;
}edge[N];
int cmp(Edge a,Edge b)
{
    return a.z<b.z;
}
int find(int x)
{
    if(x==fa[x]) return x;
    fa[x]=find(fa[x]);
    return fa[x];
}
int main()
{
    freopen("mst2.in","r",stdin);
    freopen("mst2.out","w",stdout);
    n=read(),m=read();
    ;i<=m;i++)
    {
        x=read(),y=read(),z=read();
        edge[i].x=x;
        edge[i].y=y;
        edge[i].z=z;
    }
    ;i<=n;i++) fa[i]=i;
    sort(edge+,edge++m,cmp);
    ;i<=m;i++)
    {
        int fx=find(edge[i].x),fy=find(edge[i].y);
        if(fx==fy) continue;
        tot++;fa[fx]=fy;
        ans[tot]=i;sum+=edge[i].z;
        ) break;
    }
    ;i<=tot;i++)
    {
        k=,num=;
        ;j<=n;j++) fa[j]=j;
        sort(edge+,edge++m,cmp);
        ;j<=m;j++)
        {
            if(j==ans[i]) continue;
            int fx=find(edge[j].x),fy=find(edge[j].y);
            if(fx!=fy)
            {
                fa[fx]=fy;
                num++;
                k+=edge[j].z;
            }
            ) break;
        }
        &&k!=sum) answer=min(k,answer);
    }
    printf("%d",answer);
}

最新文章

  1. 剑指Offer面试题:27.最小的k个数
  2. 在火狐、360等浏览器中,用jquery创建表单并发送的问题
  3. Codeforces Round #252 (Div. 2) B. Valera and Fruits
  4. 安装jdk java -version 不是自己所需要的版本
  5. 通过百度地图API显示当前位置在地图上(图标显示)--第三方开源--百度地图(二)
  6. MySQL使用rand函数实现随机数
  7. javascript基础之javascript的存在形式和js代码块在页面中的存放位置
  8. js中constructor的作用
  9. golang中Context的使用场景
  10. PCB载流你必须知道的那些事儿
  11. Spark官方调优文档翻译(转载)
  12. C# winform窗体间传值(使用委托或事件)
  13. jQuery中事情的动态绑定
  14. rank() over,dense_rank(),row_number() 的区别
  15. POJ 1131
  16. ansible 一键部署
  17. Oracle分组取第一条数据
  18. OkHttp完全解析之整体调用流程
  19. 玩转微信2次开发1_交互通信api.php(微擎版)
  20. git error: unable to write file xxx,git fatal: unable to write new index file

热门文章

  1. 洛谷 P1045 麦森数
  2. qW3xT.2挖矿病毒处理方案
  3. BFS POJ 3126 Prime Path
  4. java 配置信息类 Properties 的简单使用
  5. [ CodeForces 1064 B ] Equations of Mathematical Magic
  6. C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppCommon.targets(249,5): error MSB6006: “CL.exe”已退出,代码为 -1073741515。
  7. 上传一个npm包
  8. vs2017 创建C#类时添加文件头
  9. Java_数组1_16.5.12
  10. Jmeter之JDBC请求参数化(二)