题意:有一种叫作Pseudoforest的结构,表示在无向图上,每一个块中选取至多包含一个环的边的集合,又称“伪森林”。问这个集合中的所有边权之和最大是多少?

分析:如果没有环,那么构造的就是最大生成森林,在此基础上,只要取每个块中剩余边的最大边,必然得到结果。不过要构造出每条边归属于哪个块。

    看了别人的代码,发现原来可以直接构造出一个标记数组记录环,在做并查集的时候扩充if(find(u)==find(v))这一条件,可以直接得到结果。

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int MAXN=;
const int MAXM=; struct Edge{
int u,v,c;
}edge[MAXM]; int p[MAXN],is[MAXN]; int cmp(Edge a,Edge b)
{
return a.c>b.c;
} void init(int n)
{
for(int i=;i<n;i++)
{
is[i]=;
p[i]=i;
}
} int Find(int x)
{
return p[x]==x?x:p[x]=Find(p[x]);
} int check(int u,int v,int c)
{
int fu=Find(u);
int fv=Find(v);
if(fu==fv){
if(is[fu])
return ;
is[fu]=;
return ;
}
if(is[fu]&&is[fv])
return ;
if(is[fu])
p[fv]=fu;
else
p[fu]=fv;
return ;
} int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
if(!n&&!m)
return ;
for(int i=;i<m;i++)
scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].c);
sort(edge,edge+m,cmp); int ans=;
init(n);
for(int i=;i<m;i++)
{
if(check(edge[i].u,edge[i].v,edge[i].c))
ans+=edge[i].c;
}
printf("%d\n",ans);
}
return ;
}
/*
5 6
0 1 4
1 2 5
0 2 3
0 3 2
3 4 3
3 4 2
*/

最新文章

  1. mobx源码解读3
  2. zabbix解决中文乱码问题(没有测试成功)
  3. svn还原到指定版本
  4. 打开VS调试不进入开发的网站直接跳转到主页
  5. user is not mapped
  6. CSS Grid layout布局
  7. 使用meaven打包过程中遇到的一些问题
  8. python中变量命名
  9. Xamarin Android Gestures详解
  10. 盒模型 bug 与触发 bfc
  11. 创建hbase-indexer出现 0 running
  12. git命令的理解与扩展
  13. POJ2975 Nim 【博弈论】
  14. java 对象属性复制,将一个对象的属性值赋值给另一个对象, 属性名需要相同
  15. python django基础三 模版渲染
  16. C++类的继承中构造函数和析构函数调用顺序例子
  17. linux 修改用户密码的几种方法
  18. VSCode中怎么改变文件夹的图标
  19. 图的M 着色问题
  20. gridvew使用技巧2

热门文章

  1. laravel 安装碰到的问题:全局安装 Laravel Installer,然后用下面的指令创建新项目: laravel new blog报连接超时解决方案
  2. Codeforces Round #448 (Div. 2) B. XK Segments【二分搜索/排序/查找合法的数在哪些不同区间的区间数目】
  3. HNOI2004 郁闷的出纳员(Splay)
  4. Beginning iOS 8 Programming with Swift-TableView
  5. 【NOIP模拟赛】【乱搞AC】【奇技淫巧】【乘法原理】回文串计数
  6. 事务没有提交导致 锁等待Lock wait timeout exceeded异常
  7. SQL 序号列ROW_NUMBER,RANK,DENSE_RANK、NTILE
  8. fuser 和 lsof
  9. 【Maven】1.使用myecplise配置自己的Maven配置,不使用默认的maven
  10. docker之人手一台服务器