- 题目大意

有一个V个结点M条边的带边权无向平面图,有一个人在一个区域,要拆一些墙使得他可以到达任意一个区域,问最小花费。

- 解题思路

先开始想不通,看了别人突然恍然大悟,根据欧拉公式我们可以知道对于一个有k个连通分量的平面图的区域数r=E−V+k+1。那么那么对偶图生成树的边数为r−1=E−V+k,这些边也就是要删除的原图中的边,那么要留下的边数就是V−k这刚好就是原图每个连通分量生成树的边数之和。考虑保留原图每个连通分量的生成树,显然满足要求。题目要求花费最小,也就是留下的边权值最大,那么我们直接对每个连通分量求最大生成树即可,删除的边数就是总边数减去生成树的边数和,最小花费就是全部边的花费减去最大生成树的花费。

- 代码

#include<algorithm>
#include<cstdio>
using namespace std;
const int MAX=1e6;
int fa[MAX];
long long sum,tmp,sum1;void init(int n){for(int i=1;i<=n;i++){fa[i]=i;}}struct Edge {int u, v, w;bool operator<(const Edge &rhs)const {return w > rhs.w;}
}e[MAX];int find(int x)
{if(x==fa[x])return x;elsereturn fa[x]=find(fa[x]);
}bool Union(int x,int y)
{int fx=find(x),fy=find(y);if(fx==fy)return false;fa[fx]=fy;return true;
}void kruskal(int m)
{sort(e,e+m);for(int i=0;i<m;i++){int u=e[i].u,v=e[i].v,w=e[i].w;if(Union(u,v)){sum+=w;tmp--;}}
}int main()
{int n,m,x,y;while(scanf("%d%d",&n,&m)!=EOF){init(n);sum1=0;for(int i=0;i<n;i++)scanf("%d%d",&x,&y);for(int i=0;i<m;i++){scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);sum1+=e[i].w;}tmp=m,sum=0;kruskal(m);printf("%lld %lld\n",tmp,sum1-sum);}return 0;
}

  

转载于:https://www.cnblogs.com/alpacadh/p/8449462.html

I - Destroy Walls (HDU - 6187)相关推荐

  1. HDU 6187 Destroy Walls

    Destroy Walls Long times ago, there are beautiful historic walls in the city. These walls divide the ...

  2. 【HDU - 6187】Destroy Walls(思维,最大生成树)

    题干: Long times ago, there are beautiful historic walls in the city. These walls divide the city into ...

  3. Destroy Walls

    点击打开链接 Problem Description Long times ago, there are beautiful historic walls in the city. These wal ...

  4. 2017ACM/ICPC广西邀请赛

    2017ACM/ICPC广西邀请赛(感谢广西大学) 题号 题目 考点 难度 A A Math Problem 数论 签到题 B Color it C Counting Stars D Covering ...

  5. 2019.9.19最小生成树知识点总结

    ​​​​​HDU 1102 Constructing Roads(最小生成树-Prim) 最常见的,将已建成的路的权值设置为0,求最小生成树! HDU 1162 Eddy's picture(最小生成 ...

  6. 2017ACM/ICPC广西邀请赛题解

    以下所有AC题解代码来自"仙客传奇"团队. AC题数:10/12 ABCDEFGHJK A. A Math Problem AC的C++语言程序: #include<iost ...

  7. HDU 4940 Destroy Transportation system(无源汇上下界网络流)

    Problem Description Tom is a commander, his task is destroying his enemy's transportation system. Le ...

  8. HDU 4679 Terrorist’s destroy

    如果不在最长路的边,那么肯定是w*最长路. 如果在最长路,那么把最长路分成两段,左边树的最长路就是左段+左边点的次短路(不包含最长路上的点的最长路) ,右边同理. 还有就是更新,经过左端点的最长路,不 ...

  9. HDU 4738 Caocao‘s Bridges(桥、任何位运算一定都要加括号、因为有重边所以用前向星)

    HDU 4738 Caocao's Bridges(桥.任何位运算一定都要加括号.因为有重边所以用前向星) Caocao was defeated by Zhuge Liang and Zhou Yu ...

最新文章

  1. LeetCode Algorithm 3. 无重复字符的最长子串
  2. comsol如何设置距离梯度_使用 COMSOL 软件求解经典 CFD 基准问题:顶盖驱动空腔...
  3. spring学习(51):对象的初始化和销毁
  4. 《Python Cookbook 3rd》笔记(1.15):通过某个字段将记录分组
  5. python LIST学习
  6. iPhone 12 Mini曝光:售价5000内、电池容量不忍看
  7. Leanote使用mysql_《搭建个人Leanote云笔记本》阿里云体验实验室 教程
  8. LeetCode—Python版数组简单题(一)
  9. 虚幻引擎4 DEMO打包下载
  10. windows_2008_server无法安装vcredist_x64
  11. Typora无法打开提示安装新版本解决办法
  12. Ubuntu上安装Firefox浏览器
  13. Python爬虫:博客被抄袭了还不知道?快来查查
  14. spacy语言模型安装踩坑经历
  15. SEO零基础入门教程(外链的发布和软文编写)
  16. 美业SaaS的创业分享之[定位]:美业SaaS的定位到底是工具还是平台
  17. 动网8.1后台拿站技巧
  18. 华大HC32F460 SDIO TF卡实验
  19. listbox控件的一些操作
  20. [大数据概念]-- 大数据的技术生态比喻

热门文章

  1. 【05】CC - 格式
  2. 开发提效小技巧分享(一)
  3. java switch枚举类,使用枚举类enum代替switch
  4. mysql 数据库军规_用尽洪荒之力整理的Mysql数据库32条军规(转)
  5. xtrabackup备份mysql_xtrabackup备份mysql
  6. IE浏览器通过代码控制文档对象模式
  7. Linux启动hbase的shell命令出现警告_Linux 系统故障排查和修复技巧
  8. 2019-07-18
  9. 2018-03-22笔记,象棋记谱法
  10. 简书留言频率限制机制