当前位置: 首页 > news >正文

HDU 6081 度度熊的王国战略【并查集/数据弱水题/正解最小割算法】

链接6081
度度熊的王国战略
Time Limit: 40000/20000 MS (Java/Others) Memory Limit: 32768/132768 K (Java/Others)
Total Submission(s): 923 Accepted Submission(s): 352

Problem Description
度度熊国王率领着喵哈哈族的勇士,准备进攻哗啦啦族。

哗啦啦族是一个强悍的民族,里面有充满智慧的谋士,拥有无穷力量的战士。

所以这一场战争,将会十分艰难。

为了更好的进攻哗啦啦族,度度熊决定首先应该从内部瓦解哗啦啦族。

第一步就是应该使得哗啦啦族内部不能同心齐力,需要内部有间隙。

哗啦啦族一共有n个将领,他们一共有m个强关系,摧毁每一个强关系都需要一定的代价。

现在度度熊命令你需要摧毁一些强关系,使得内部的将领,不能通过这些强关系,连成一个完整的连通块,以保证战争的顺利进行。

请问最少应该付出多少的代价。

Input
本题包含若干组测试数据。

第一行两个整数n,m,表示有n个将领,m个关系。

接下来m行,每行三个整数u,v,w。表示u将领和v将领之间存在一个强关系,摧毁这个强关系需要代价w

数据范围:

2<=n<=3000

1<=m<=100000

1<=u,v<=n

1<=w<=1000

Output
对于每组测试数据,输出最小需要的代价。

Sample Input
2 1
1 2 1
3 3
1 2 5
1 2 4
2 3 3

Sample Output
1
3

Source
2017"百度之星"程序设计大赛 - 资格赛

【水法】

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+5;
const int INF=1<<30;
int sum[N];

int main()
{
    int n,m;
    while(cin>>n>>m)
    {
        memset(sum,0,sizeof(sum));
        int a,b,w;
        while(m--)
        {
            cin>>a>>b>>w;
            if(a==b) continue;//
            sum[a]+=w;
            sum[b]+=w;
        }
        sort(sum+1,sum+n+1);
        cout<<sum[1]<<endl;
    }
} 

【并查集】

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+5;
const int INF=1<<30;
int sum[N];
int fa[N];
int n,m;
int a,b,w;
void init()
{
    for(int i=0;i<=n;i++)
        fa[i]=i;
}
int Find(int x)
{
    return fa[x] = fa[x] == x ? x : Find(fa[x]);
}
void join(int x,int y)
{
    int fx = Find(x);
    int fy = Find(y);
    if(fx!=fy)
        fa[fy]=fx;
}
int main()
{
    while(cin>>n>>m)
    {
        init();
        int cnt = n-1;
        memset(sum,0,sizeof(sum));
        while(m--)
        {
            cin>>a>>b>>w;
            if(a==b) continue;//
            sum[a]+=w;
            sum[b]+=w;
            int fx = Find(a);
            int fy = Find(b);
            if(fx!=fy)
            {
                cnt--;
                join(fx,fy);
            }
        }
        if(!cnt){
            sort(sum+1,sum+n+1);
            cout<<sum[1]<<endl;
        }else{
            cout<<"0"<<endl;
        }
        
    }
} 

转载于:https://www.cnblogs.com/Roni-i/p/9261451.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • opencv2学习之threshold:实现图像阈值分割
  • 一定要做自己最内行的东西,一定要在自己本身的职位上来提升自己
  • 云原生持续交付的模式和实践
  • 美国国家安全局网络武器被公开,微软宣布已修复可攻破的 Windows 漏洞
  • sssss
  • “特斯拉破解第一人”又造出“万能车破解器”:黑掉一辆车有多简单?
  • 一天一点学linux
  • Linux基础要点
  • 数据库中乐观锁与悲观锁的概念
  • html5表单原生自定义验证
  • rc-form之最单纯情况
  • [HDU5685]Problem A
  • 修改asm中的sys密码
  • “Master”连胜世界围棋冠军,谁是幕后智能引擎?
  • JSOUP 超时分析与处理
  • $translatePartialLoader加载失败及解决方式
  • C++类中的特殊成员函数
  • CSS 提示工具(Tooltip)
  • leetcode388. Longest Absolute File Path
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • SpringCloud集成分布式事务LCN (一)
  • Vue官网教程学习过程中值得记录的一些事情
  • 从零开始学习部署
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 记一次和乔布斯合作最难忘的经历
  • 区块链分支循环
  • 使用Swoole加速Laravel(正式环境中)
  • 算法之不定期更新(一)(2018-04-12)
  • 写给高年级小学生看的《Bash 指南》
  • 用mpvue开发微信小程序
  • 回归生活:清理微信公众号
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • $.each()与$(selector).each()
  • $L^p$ 调和函数恒为零
  • (1)常见O(n^2)排序算法解析
  • (1)无线电失控保护(二)
  • (152)时序收敛--->(02)时序收敛二
  • (8)STL算法之替换
  • (C语言)逆序输出字符串
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (四)JPA - JQPL 实现增删改查
  • (算法设计与分析)第一章算法概述-习题
  • (一)RocketMQ初步认识
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)【Hibernate总结系列】使用举例
  • (转)Google的Objective-C编码规范
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • @Autowired和@Resource装配
  • [Android]竖直滑动选择器WheelView的实现
  • [C#]扩展方法