I - Destroy Walls (HDU - 6187)
- 题目大意
有一个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)相关推荐
- HDU 6187 Destroy Walls
Destroy Walls Long times ago, there are beautiful historic walls in the city. These walls divide the ...
- 【HDU - 6187】Destroy Walls(思维,最大生成树)
题干: Long times ago, there are beautiful historic walls in the city. These walls divide the city into ...
- Destroy Walls
点击打开链接 Problem Description Long times ago, there are beautiful historic walls in the city. These wal ...
- 2017ACM/ICPC广西邀请赛
2017ACM/ICPC广西邀请赛(感谢广西大学) 题号 题目 考点 难度 A A Math Problem 数论 签到题 B Color it C Counting Stars D Covering ...
- 2019.9.19最小生成树知识点总结
HDU 1102 Constructing Roads(最小生成树-Prim) 最常见的,将已建成的路的权值设置为0,求最小生成树! HDU 1162 Eddy's picture(最小生成 ...
- 2017ACM/ICPC广西邀请赛题解
以下所有AC题解代码来自"仙客传奇"团队. AC题数:10/12 ABCDEFGHJK A. A Math Problem AC的C++语言程序: #include<iost ...
- HDU 4940 Destroy Transportation system(无源汇上下界网络流)
Problem Description Tom is a commander, his task is destroying his enemy's transportation system. Le ...
- HDU 4679 Terrorist’s destroy
如果不在最长路的边,那么肯定是w*最长路. 如果在最长路,那么把最长路分成两段,左边树的最长路就是左段+左边点的次短路(不包含最长路上的点的最长路) ,右边同理. 还有就是更新,经过左端点的最长路,不 ...
- HDU 4738 Caocao‘s Bridges(桥、任何位运算一定都要加括号、因为有重边所以用前向星)
HDU 4738 Caocao's Bridges(桥.任何位运算一定都要加括号.因为有重边所以用前向星) Caocao was defeated by Zhuge Liang and Zhou Yu ...
最新文章
- LeetCode Algorithm 3. 无重复字符的最长子串
- comsol如何设置距离梯度_使用 COMSOL 软件求解经典 CFD 基准问题:顶盖驱动空腔...
- spring学习(51):对象的初始化和销毁
- 《Python Cookbook 3rd》笔记(1.15):通过某个字段将记录分组
- python LIST学习
- iPhone 12 Mini曝光:售价5000内、电池容量不忍看
- Leanote使用mysql_《搭建个人Leanote云笔记本》阿里云体验实验室 教程
- LeetCode—Python版数组简单题(一)
- 虚幻引擎4 DEMO打包下载
- windows_2008_server无法安装vcredist_x64
- Typora无法打开提示安装新版本解决办法
- Ubuntu上安装Firefox浏览器
- Python爬虫:博客被抄袭了还不知道?快来查查
- spacy语言模型安装踩坑经历
- SEO零基础入门教程(外链的发布和软文编写)
- 美业SaaS的创业分享之[定位]:美业SaaS的定位到底是工具还是平台
- 动网8.1后台拿站技巧
- 华大HC32F460 SDIO TF卡实验
- listbox控件的一些操作
- [大数据概念]-- 大数据的技术生态比喻