标签:hdoj2122
2 1 0 1 10 4 0
10 impossible
#include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<iostream> #include<cmath> using namespace std; int n,m; int pre[1010]; struct node{ int u; int v; int w; }; node sb[10010]; bool cmp(node a,node b) { return a.w<b.w; } int find(int x) { if(pre[x]==x) return x; return pre[x]=find(pre[x]); } bool join(int x,int y) { int f1,f2; f1=find(x); f2=find(y); if(f1==f2) return false; if(f1!=f2) pre[f1]=f2; return true; } int main() { int sum; while(scanf("%d%d",&n,&m)!=EOF) { sum=0; for(int i=0;i<n;i++) pre[i]=i; for(int i=0;i<m;i++) scanf("%d%d%d",&sb[i].u,&sb[i].v,&sb[i].w); sort(sb,sb+m,cmp); for(int i=0;i<m;i++) { if(join(sb[i].u,sb[i].v)) sum+=sb[i].w; } int cnt=0; for(int i=0;i<n;i++) { if(pre[i]==i) cnt++; } if(cnt>1) printf("impossible\n\n"); else printf("%d\n\n",sum); } return 0; }
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; const int INF= 0x3f3f3f3f; const int maxb=1010; int map[maxb][maxb]; int vis[maxb]; int n,m,sum; int a,b,c; void prime() { int i,j,k,dis[maxb]; int min; memset(vis,0,sizeof(vis)); int ans=1; vis[0]=1; for(i=0;i<n;i++) dis[i]=map[0][i]; for(i=0;i<n;i++) { min=INF; for(j=0;j<n;j++) if(!vis[j]&&min>dis[j]) min=dis[k=j]; if(min==INF) { if(ans==n) printf("%d\n",sum); else puts("impossible"); break; } sum+=min; vis[k]=1; ans++; for(j=0;j<n;j++) if(!vis[j]&&dis[j]>map[k][j]) dis[j]=map[k][j]; } } int main() { while(scanf("%d%d",&n,&m)!=EOF) { memset(map,INF,sizeof(map)); sum=0; while(m--) { scanf("%d%d%d",&a,&b,&c); if(map[a][b]>c) map[a][b]=map[b][a]=c; } //getchar(); prime(); //getchar(); puts(""); } return 0; }
版权声明:博主情人,外人误碰!!!
hdoj 2122 Ice_cream’s world III【最小生成树】
标签:hdoj2122
原文地址:http://blog.csdn.net/qq_21654717/article/details/47609541