HDU3371
来源:互联网 发布:网络没有ip地址 编辑:程序博客网 时间:2024/05/19 23:01
求最小生成树
给定k个联通的块,对于第i个联通块,有ci个城市互相联通,这里只要把块中的每个城市跟其他任意一个相连就可以,即设2个城市之间的边权值为0
注意判重边
C++AC,G++TLE
#include <iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<string>#define N 25000+5#define INF 1<<30using namespace std;int map[505][505],vis[505],closed[505];int m,n,k;void prime(){ int i,j,Min,mark,ans=0; for(i=1;i<=n;i++){ closed[i]=map[i][1]; vis[i]=0; } vis[1]=1; for(i=1;i<n;i++){ Min=INF; for(j=1;j<=n;j++){ if(!vis[j]&&closed[j]<Min){ Min=closed[j]; mark=j; } } if(Min==INF){ break; } vis[mark]=1; ans+=Min; for(j=1;j<=n;j++){ if(map[mark][j]<closed[j]) closed[j]=map[mark][j]; } } if(i==n) printf("%d\n",ans); else printf("-1\n");}int main(){ int t,tmp,i,j,v,u; scanf("%d",&t); while(t--){ scanf("%d%d%d",&n,&m,&k); for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ map[i][j]=INF; } } for(i=0;i<m;i++){ scanf("%d%d",&u,&v); scanf("%d",&tmp); map[u][v]=min(tmp,map[u][v]); map[v][u]=min(tmp,map[v][u]); } memset(vis,0,sizeof(vis)); while(k--){ scanf("%d%d",&tmp,&u); tmp--; while(tmp--){ scanf("%d",&v); map[u][v]=map[v][u]=0; u=v; } } /* for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ cout<<map[i][j]<<' '; } cout<<endl; }*/ prime(); } return 0;}
0 0
- hdu3371
- hdu3371
- HDU3371
- HDU3371
- hdu3371
- HDU3371&&POJ2485
- hdu3371 Connect the Cities
- hdu3371一个“ ; ”一个郁闷
- HDU3371--Connect the Cities
- hdu3371 Connect the Cities
- HDU3371 Connect the Cities
- hdu3371: Connect the Cities
- Hdu3371【最小生成树】
- HDU3371--- Connect the Cities
- HDU3371-Connect the Cities
- hdu3371 Connect the Cities
- hdu3371之最小生成树
- HDU3371 Connect the Cities【Kruskal】
- J2EE与中间件学习概要一(overview)
- NYOJ 4 ASCII码排序
- C++界面库
- 《Effective C++》学习笔记条款13 以对象管理资源
- 解决android执行adb shell的错误问题
- HDU3371
- Sail
- (键盘)代码 19:由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备 解决方法
- 机房收费系统—美化
- (并查集入门)Ubiquitous Religions
- 分析dump日志
- 李开复:算法的力量
- C++中extern “C”含义深层探索
- 2013年考场改革后第五次学车