hdu 3371 Connect the Cities 最小生成树
来源:互联网 发布:知乎 什么叫头部媒体 编辑:程序博客网 时间:2024/06/05 11:54
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <stack>#include <set>#include <map>#include <string>#include <math.h>#include <stdlib.h>#include <time.h>using namespace std;const int inf=1<<24;int n,m,k,a[25000+5],b[25000+5],c[25000+5];int mp[1024][1024];int p[1024];int Find(int x){ if(p[x]==x) return x; else return p[x]=Find(p[x]);}void Union(int x,int y){ int fx=Find(x),fy=Find(y); if(fx!=fy) { if(fx<fy) p[fy]=fx; else p[fx]=fy; }}int main(){ int _,i,j,t,p1,p2,lowcost[1024]; scanf("%d",&_); while(_--) { for(i=0; i<1024; i++) p[i]=i; scanf("%d%d%d",&n,&m,&k); for(i=0;i<=n;i++) for(j=0;j<=n;j++) mp[i][j]=inf; for(i=0; i<m; i++) scanf("%d%d%d",&a[i],&b[i],&c[i]); for(i=0; i<k; i++) { scanf("%d",&t); scanf("%d",&p1); for(j=1; j<t; j++) { scanf("%d",&p2); Union(p1,p2); } } for(i=0; i<m; i++) { p1=Find(a[i]); p2=Find(b[i]); if(p1==p2) continue; mp[p1][p2]=min(mp[p1][p2],c[i]); mp[p2][p1]=min(mp[p2][p1],c[i]); } int ans=0; for(i=2; i<=n; i++) { if(Find(i)!=i) continue; lowcost[i]=mp[1][i]; } lowcost[1]=-1; for(i=2; i<=n; i++) { if(Find(i)!=i) continue; int minx=inf; int v=-1; for(j=1; j<=n; j++) { if(Find(j)!=j) continue; if(lowcost[j]!=-1&&lowcost[j]<minx) { v=j; minx=lowcost[j]; } } if(v!=-1) { ans+=minx; lowcost[v]=-1; for(j=1; j<=n; j++) { if(Find(j)!=j) continue; if(mp[v][j]<lowcost[j]) lowcost[j]=mp[v][j]; } } } for(i=1; i<=n; i++) if(Find(i)==i&&lowcost[i]!=-1) break; if(i>n) printf("%d\n",ans); else printf("-1\n"); } return 0;}
0 0
- hdu 3371 Connect the Cities(最小生成树)
- hdu 3371 Connect the Cities 最小生成树(kruskal算法)
- HDU 3371 Connect the Cities(最小生成树)
- hdu 3371 最小生成树Connect the Cities
- hdu oj 3371 Connect the Cities (最小生成树)
- hdu 3371 Connect the Cities(最小生成树))
- HDU 3371 Connect the Cities 最小生成树
- HDU 3371 Connect the Cities 【最小生成树】
- hdu 3371(Connect the Cities)(最小生成树)
- hdu 3371 Connect the Cities(最小生成树kruskal)
- hdu 3371 Connect the Cities 最小生成树
- hdu 3371 Connect the Cities 最小生成树prim
- HDU-3371 Connect the Cities(最小生成树)
- HDU 3371Connect the Cities(最小生成树)
- HDU 3371 Connect the Cities 最小生成数
- hdu3371 Connect the Cities (最小生成树)
- HDU_3371 Connect the cities(最小生成树)
- Connect the Cities 【最小生成树】
- 翻转bitorder
- hdu 1251 统计难题
- c++ 类的赋值运算符=的重载,以及深拷贝和浅拷贝
- 菲利亚指的是在对善的追寻中同行,共同住在一个社区的人们之间的友情;
- poj 1182
- hdu 3371 Connect the Cities 最小生成树
- exit与_exit
- 关于《一种基于球面透视投影约束的鱼眼镜头校正方法》的流程
- HDU 1212 Big Number(简单的大数取模)
- 记票统计(java版整理)
- Strom入门(一)
- runtime
- 使用FTP服务器(Working with FTP Servers)
- Android ADB工具-进行文件操作(三)