原题链接:点击此处
1233的升级版(因为差不多所以都放一起了),就是加了一个状态,因此我们可以先判断每条路的状态,如果是修好的,就让它们的成本是0;如果没修,就给出成本。其余地方和1233一样,程序唯一的改动在此:
判断状态:
for(i=1;i<=n;i++) { scanf("%d %d %d %d",&tree[i].u,&tree[i].v,&tree[i].len,&tree[i].build); if(tree[i].build==1) tree[i].len=0; }
合并:
for(i=1;i<=n;i++) { int x=Find(tree[i].u); int y=Find(tree[i].v); if(x==y) continue; pre[y]=x;//这里是把x当作了整棵最小生成树的根节点,写成parent[x]=y也可以,根节点换成了y,这里的x,y值都不会大于村庄的编号 cost+=tree[i].len; Unoin(tree[i].u,tree[i].v); }
其他程序看前一个文章吧,就不多说了。