hdu 3371 Connect the Cities 最小生成树prim
来源:互联网 发布:长沙开福网络花店 编辑:程序博客网 时间:2024/06/06 02:10
题目链接
题意:给出n个城市,m条路,k组互相还连通的城市,求使城市连通的最小的代价。
k组城市之间不需要两两距离赋为0,只需建立n-1条距离为0的路即可。
#include <iostream>#include<cstdio>#include<cstring>#include<cmath>#define N 550#define INF 0x7ffffffusing namespace std;int d[N],v[N],mp[N][N],n;int prim(){ for(int i=1;i<=n;i++) d[i]=INF,v[i]=0; d[1]=0; for(int i=0;i<n;i++) { int mmin=INF,t=-1; for(int j=1;j<=n;j++) if(!v[j]&&d[j]<mmin) mmin=d[t=j]; v[t]=1; if(t==-1) return -1; for(int j=1;j<=n;j++) if(!v[j]) d[j]=min(d[j],mp[t][j]); } int ans=0; for(int i=1;i<=n;i++) ans+=d[i]; return ans;}int main(){ int T,m,k; cin>>T; while(T--) { cin>>n>>m>>k; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) mp[i][j]=INF; for(int i=0;i<m;i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); if(mp[u][v]>w) mp[u][v]=mp[v][u]=w; } for(int i=0;i<k;i++) { int t,u,v; scanf("%d",&t); for(int j=0;j<t;j++) { scanf("%d",&u); if(j) mp[u][v]=mp[v][u]=0; v=u; } } cout<<prim()<<endl; }}
0 0
- hdu 3371 Connect the Cities 最小生成树prim
- 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(最小生成树)
- HDU 3371Connect the Cities(最小生成树)
- 杭电3371 Connect the Cities(最小生成树 prim)
- hdu 3371 Connect the Cities(prim)
- hdu 3371 Connect the Cities <prim>
- hdu 3371 Connect the Cities【kruskal&prim】
- 微信开发(3)语音,视频
- SVN使用教程总结
- Android Toolbar 使用
- 子元素使用float后使父元素有高度的方法
- Java中Vector和ArrayList的区别
- hdu 3371 Connect the Cities 最小生成树prim
- mac下XAMPP服务器配置多站点配置局域网配置
- ssh 密钥验证登录
- Android BroadcastReceiver生命周期分析
- 调制解调器
- 利用redis + lua解决抢红包高并发的问题
- java 如何显示当前系统时间
- Linux 下面安装tomcat
- iOS 关于post异步请求