考试的时候看少了一行,导致暴力都写错额… 贾教说他出的这题水,但是我觉得并不水,那个结论还是很神的. 首先M(i)就是i的最小生成树的最大边, 设f[i]表示i属于哪个集合 我们把边按权值从小到大排序,对于一条边(u,v),权值为w, 如果w<=min(M(f[u])+Z[C[f[u]]],M(f[v])+Z[C[f[v]]]), 那么u,v就不能分开,否则不满足“半完美”这个条件,那就把它们放入一个集合. 搞完之后扫一遍输出每个集合即可. 至于怎么证明正确性,我也不知道. #include<…