【图论】【最小生成树】[IOI2003]maintain
来源:互联网 发布:淘宝联盟用优惠卷 编辑:程序博客网 时间:2024/05/18 00:29
题目描述:点击此处
解题思路:
在加边的同时对边进行插入排序,当边的数量≥n-1时,进行kruskal,此时每次kruscal的复杂度为O(m),算法的时间复杂度为O(m^2)
实现代码
#include<cstdio>#include<cstring>#define INF 0x7f7f7f7f#define MAXN 200#define MAXM 6000#include<algorithm>using namespace std;int n,w,fa[MAXN+10],ans;struct node{ int u,v,wt;}edge[MAXM+10];int find_fa(int x){ if(fa[x]==x) return x; return find_fa(fa[x]);}int kruskal(int ne){ int i,j=0,u,v,ret=0; for(i=1;i<=n;i++) fa[i]=i; for(i=1;i<n;i++){ for(j++;j<=ne;j++){ u=edge[j].u,v=edge[j].v; fa[u]=find_fa(u); fa[v]=find_fa(v); if(fa[u]!=fa[v]){ ret+=edge[j].wt; fa[fa[v]]=fa[u]; break; } } if(j>ne) return -1; } return ret;}int main(){ int i,j,k; scanf("%d%d",&n,&w); for(i=1;i<=w;i++){ node t; scanf("%d%d%d",&t.u,&t.v,&t.wt); for(j=1;j<i;j++) if(edge[j].wt>t.wt){ for(k=i;k>j;k--) edge[k]=edge[k-1]; break; } edge[j]=t; if(i<n-1){ puts("-1"); continue; } printf("%d\n",kruskal(i)); }}
0 0
- 【图论】【最小生成树】[IOI2003]maintain
- 【图论】最小生成树
- 图论-最小生成树
- 图论-最小生成树-Prim
- 图论-最小生成树-Kruskal
- 图论-最小生成树算法
- 最小比例 最小生成树
- 最小生成树&&次最小生成树
- 最小生成生成树计数
- AVL树笔记(二):maintain,delete
- 图论-最小生成树(MST)算法
- 图论(一)最小生成树
- poj 1287 Networking(图论:最小生成树)
- poj 1861 Network(图论:最小生成树)
- 图论——最小生成树
- 图论——最小生成树
- 1002 搭桥-最小生成树 图论
- 理论: 图论(8): 最小生成树
- SecureCRT突然卡死的问题
- The First Pig Task
- [置顶]数据结构课程设计
- [置顶]对FileUpload文件上传控件的一些使用方法说明
- 杭电3635-Dragon Balls(并查集)
- 【图论】【最小生成树】[IOI2003]maintain
- LeetCode题解——Combination Sum II
- 重读C语言---基本知识 与概念 笔记
- RabbitMQ
- 5+从头到尾打印链表中的节点
- cocos2dx 快速创建工程的方法 便捷操作 快捷方式
- 【NOIP2001】Car的旅行线路
- 2016CVTE一面
- windows变量环境