POJ1861
来源:互联网 发布:域名备案买什么服务器 编辑:程序博客网 时间:2024/06/06 01:42
#include<cstdio>#include<vector>#include<cstring>#include<algorithm>using namespace std;const int maxn=1000+10;const int maxm=15000+10;struct Edge{ int u,v,dist; Edge(){} Edge(int u,int v,int d):u(u),v(v),dist(d){} bool operator<(const Edge &rhs)const { return dist < rhs.dist; }};struct Kruskal{ int n,m; Edge edges[maxm]; int fa[maxn]; vector<int> bag; int findset(int x){ return fa[x]==-1? x:fa[x]=findset(fa[x]); } void init(int n) { this->n=n; m=0; bag.clear(); memset(fa,-1,sizeof(fa)); } void AddEdge(int u,int v,int dist) { edges[m++]=Edge(u,v,dist); } int kruskal() { int edge_max; int sum=0; int cnt=0; sort(edges,edges+m); for(int i=0;i<m;i++) { int u=edges[i].u, v=edges[i].v; if(findset(u) != findset(v)) { bag.push_back(i); edge_max=edges[i].dist; sum +=edges[i].dist; fa[findset(u)] = findset(v); if(++cnt>=n-1) break; } } if(cnt<n-1) return -1; return edge_max; }}KK;int n,m;int main(){ int cnt=0; scanf("%d%d",&n,&m); int u,v,d; KK.init(n); for(int i=0;i<m;i++){ scanf("%d%d%d",&u,&v,&d); KK.AddEdge(u,v,d); } int edge_max=KK.kruskal(); printf("%d\n%d\n",edge_max,n-1); for(int i=0;i<n-1;i++){ int num=KK.bag[i]; int a=KK.edges[num].u,b=KK.edges[num].v; printf("%d %d\n",a,b); } return 0;}
0 0
- poj1861
- poj1861
- poj1861
- poj1861
- poj1861
- POJ1861
- POJ1861
- POJ1861 Network
- poj1861 - Network
- POJ1861 Network
- poj1861 Network
- poj1861 kruskal
- poj1861 Network
- POJ1861 Network
- POJ1861 kruskal.
- poj1861 Network
- Kruskal POJ1287 POJ1861 POJ2349
- POJ1861——Network
- 第一次写博客
- 共享栈(多线程)
- onethink怎么不用每次都删除缓存
- 负载均衡 跨Session
- 数据结构学习笔记9——区分叶结点与分支结点的二叉树实现方案一
- POJ1861
- POJ1789
- [安卓自定义控件]用于显示排名提示的RankTipsView
- Bootstrap起步 20151212
- 我是码农吗?
- 剑指offer--重构二叉树
- 自动接听电话的另一种思路(只需要root权限)
- Spring一
- android 自定义View开发实战(二) CustomCircleView