求大神解惑

P3366 【模板】最小生成树

余歆 @ 2021-12-13 10:52:02

搞不懂,很不理解,我用的堆优化Prim

q.push(make_pair(0,1));

这是对的

q.push(make_pair(1,0));

这却是错的 就是必须前距离后标号??

for(register int i=2;i<=n;++i)  dis[i] = inf;

这也是错的

  memset(dis,127,sizeof(dis));

第二篇题解这样却AC了?! WHAT?


by Hollis_Yang @ 2021-12-13 11:22:15

@余歆


by Hollis_Yang @ 2021-12-13 11:23:10

第一个问题如果你认为可以交换位置的话,建议重新学习一下prim


by Hollis_Yang @ 2021-12-13 11:28:41

不知道怎么说,你写堆优化的话个人建议STL优先队列+结构体+重载运算符(个人喜好),这样就不会出问题了


by Liweiang @ 2021-12-13 11:31:01

  memset(dis,127,sizeof(dis));

这样的写法会将dis数组都赋成一个大值


by PassName @ 2021-12-13 12:03:16

没错,对于数组而言,用memset不会爆,你的pair用的也有问题,建议你把算法再巩固一下


by 余歆 @ 2021-12-15 08:13:50

@htssm @liweiang09 @单南松 终于搞懂了,感谢各位大神指导


|