题意:

对当前的一个图,求一个最大的伪森林,即边权值最大,每一个连通分量至多含有一个圈的森林。

分析:

类似于求一个最大生成树,先将边权值排序,之后就是一个加边合并的过程,俩点所在边可以加入到当前集合有俩个条件:

1.两点在两个集合,且有至少一个集合没有环

2.两点在一个集合,且这个集合没有环

hdu3367

#include<iostream>#include<algorithm>using namespace std;struct edge{int u,v,c;}e[100005];int f[10005],n,m;bool ee[100005],ff[10005];__int64 total;bool cmp(edge a,edge b){return a.c>b.c;}void init(){    memset(ee,false,sizeof(ee));    memset(ff,false,sizeof(ff));for(int i=0;i<n;i++)        f[i]=i;}int find(int x){if(x==f[x])return f[x];    f[x]=find(f[x]);return f[x];}void Union(int x,int y,int c){int a=find(x);int b=find(y);if(a==b) {//俩点在同一个集合,则当前若已经包含有环,则该边不可加入        if(ff[a])return ;        total+=c;        ff[a]=true;    }else {if(ff[a]&&ff[b]) return ;//俩点不在同一个集合,则当俩个集合都已经包含有环时,不可加入        total+=c;        f[b]=a;if(ff[a] ||ff[b])            ff[a]=true;    }}int main(){while(scanf("%d %d",&n,&m)==2 && (n||m))    {        init();for(int i=0;i<m;i++)            scanf("%d %d %d",&e[i].u,&e[i].v,&e[i].c);        sort(e,e+m,cmp);//将边从大到小排序        total=0;for(int i=0;i<m;i++)            Union(e[i].u,e[i].v,e[i].c);        printf("%I64d\n",total);    }return 0;}

转载于:https://www.cnblogs.com/nanke/archive/2012/02/09/2344629.html

hdu3367 Pseudoforest相关推荐

  1. 图论500题 慢慢写

    题目来源 https://blog.csdn.net/ffq5050139/article/details/7832991 这篇博客用来记录自己刷的图论题 先占个坑 所有题目都来自上面的链接 会慢慢更 ...

  2. hdu 3367 Pseudoforest (最大生成树 最多存在一个环)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3367 Pseudoforest Time Limit: 10000/5000 MS (Java/Oth ...

  3. “光庭杯”第五届华中北区程序设计邀请赛 暨 WHU第八届程序设计竞赛(部分解题报告)

    这次做的比较郁闷,比赛的时候老是出这样那样的问题,卡题卡的要死.最终只做出三道,赛后静下心来我和队友一共又做出4道,要是比赛有这种状态我们的排名就好多了. 现在说说题目: 1001(hdu3361): ...

  4. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

  5. 一系列图论问题[转]

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

  6. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  7. 【转】并查集MST题集

    转自:http://blog.csdn.net/shahdza/article/details/7779230 [HDU] 1213 How Many Tables 基础并查集★ 1272 小希的迷宫 ...

  8. 杭电OJ分类题目(4)-Graph

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(4) HDU Graph Theory - U ...

  9. kk_想要学习的知识

    2018/4/27 计算几何 一.简介 计算几何属于ACM算法中比较冷门的分类,在省赛中只在前几年考察过,这两年还没有考过,而且和高精度计算一样,遇到题目主要靠套模板,因此对题意的理解至关重要,而且往 ...

最新文章

  1. 通过OKR 进行项目过程管理
  2. 相机自动对焦 OpenCV 图像清晰度评价
  3. 【正一专栏】轮回-从坚信去年骑士会逆转到今年坚定看好勇士横扫
  4. SAP Spartacus B2B功能,只渲染BodyContent position里的UI
  5. docker 镜像选择_为什么选择Docker?
  6. LeWeb – 2011 –综述
  7. 贪心策略--16经典问题总结!
  8. linux进程q是什么意思,Linux进程
  9. 运营商数据治理实践-郭岳
  10. 【李宏毅2020 ML/DL】P26-33 Explainable ML
  11. JS简单实现邻近算法(KNN)
  12. 虚拟机您的计算机无法启动,一键解决win10虚拟机无法启动的问题
  13. Prolog编程求解图搜索问题
  14. mtk9652对比鸿鹄818哪个好
  15. IBM建立大中华区云计算中心供验证测试
  16. 阻塞队列(三):DelayQueue
  17. JAVA有percentile函数吗_五分位算法
  18. 一个神奇的测试_神奇的心理测试:一个问题就能测试出你的情商!超准慎测
  19. Java后端返回Long类型数据与前端展示不一致(精度丢失)
  20. Python函数——Numpy size()

热门文章

  1. 计算机绘图cg,CG专业英语整理
  2. matlab传递函数参数辨识,基于matlab/Simulink的参数辨识
  3. TextVQA论文汇总
  4. 使用C/C++解析json文件
  5. java 08_java 08 权限修饰符 编译运行
  6. linux需要的GLIBCXX版本,GCC版本中没有GLIBCXX_3.4.15解决
  7. 共享虚拟服务器,共享虚拟主机和云服务器
  8. 冯山C语言3 15,冯山
  9. JavaScript原始类型转换和进制转换
  10. HDU 2833 WuKong