hdu 3367 Pseudoforest(最大生成树)
来源:互联网 发布:2017淘宝销售额 编辑:程序博客网 时间:2024/05/21 06:13
/* 可以说是一个最大生成树的问题吧,
题意:求出一个最大的子图(子图的每个连通分量最多有一个环)
用kruskal算法求出最大生成树 不过要判断是否有环 2树合并时 :若2个子树都有环不能合并 只有一个有环可以合并 但合并后的树有环 若2个子树都没环直接合并
*/
#include<cstdio>
#include<cstring>#include<algorithm>
using namespace std;
int n,m;
struct Edge
{
int u,v,d;
bool operator < (const Edge &s) const
{
return d>s.d;
}
}a[100010];
int p[10010],vis[10010];
int find(int x)
{
return p[x]==x?x:p[x]=find(p[x]);
}
int Union(int x,int y)
{
if(x==y) return 0;
p[x] = y;
}
int main()
{
while(scanf("%d%d",&n,&m)==2)
{
if(!n&&!m) break;
memset(vis,0,sizeof(vis));
for(int i = 0; i <= n; i++) p[i]=i;
for(int i = 0; i < m; i++)
scanf("%d%d%d",&a[i].u,&a[i].v,&a[i].d);
sort(a,a+m);
long long ans=0;
for(int i = 0; i < m; i++)
{
int x = find(a[i].u);
int y = find(a[i].v);
if(x!=y)
{
if(vis[x]&&vis[y]) continue;
if(vis[x]||vis[y])
vis[x]=vis[y]=1;
ans+=a[i].d;
Union(x,y);
}
else if(!vis[x])
{
vis[x] = 1;
ans+=a[i].d;
Union(x,y);
}
}
printf("%lld\n",ans);
}
return 0;
}
- hdu 3367 Pseudoforest(最大生成树)
- HDU 3367 Pseudoforest 最大生成树
- hdu 3367 Pseudoforest 最大生成树
- HDU 3367 Pseudoforest(最大生成树+并查集)
- HDU 3367 Pseudoforest(kruskal最大生成树变形)
- hdu 3367 Pseudoforest 变形最大生成树 解题报告
- HDU 3367 Pseudoforest (克鲁斯卡尔_最大生成树:带一环)
- hdu 3367 Pseudoforest (伪森林) not 最大生成树 解题报告
- hdoj--3367--Pseudoforest(伪森林&&最大生成树)
- Pseudoforest (伪森林) 最大生成树
- HDU 3367 Pseudoforest (最小生成树,并查集)
- HDU 3367 Pseudoforest 最小生成树
- HDU 3367 Pseudoforest 并查集求最大生成树及判断环
- hdu3367 Pseudoforest(最大生成树+伪森林)
- HDU 3367 Pseudoforest 最小生成树、并查集
- hdu 3367 Pseudoforest (krusual)
- (hdu step 6.1.8)Pseudoforest(求有一个环的最大生成树)
- hdoj 3367 Pseudoforest 【伪森林】 【并查集判断环 + 最大生成树】
- 在一个vba里去操作指定目录下的EXLCE
- win7和VS2010下配置OpenGL的方法
- Vitamio工程建立
- Direct IO的程序实现
- 杂谈-1
- hdu 3367 Pseudoforest(最大生成树)
- __stdcall等调用规约
- 利用Graphviz 画结构图
- LR运行时设置和浏览器缓存设置对应关系
- [哀悼雅安芦山地震]把网页由彩色变成灰度(谷歌、火狐、ie等浏览器兼容)
- linux下安装oracle11g 64位最简客户端
- Mysql LIKE中特殊字符转义【附php实现函数】
- ThreadLocal
- 正则表达式