【题目描述】
BZOJ2753
给一个有向图,根限制为1,求最多经过节点数,求有向图最小生成树。
【简要分析】
初看此题觉得是裸的最小树形图
但数据范围着实吓翻我
对于所有的数据,保证 1<=N<=100000,保证 1<=M<=1000000,1<=Hi<=1000000000,1<=Ki<=1000000000。
“此题应该是有特殊性质的吧”,然后就往高度方向想
高度相等的点若有边相连则此边一定是无向边
然后我nc的想都不想清楚就tarjan缩了次点
虽然缩点没用但是也顺便求了第一问= =
然后开始乱搞了
Kruskal为什么不能求最小树形图呢
因为边有向导致不能保证从根能够到生成树的每个叶子
所以我就按Kruskal的思想但挑高处的边先选,然后再按权值小的先选
于是就AC了= =
有想法的可以留言讨论下(@QW)
再说代码吧
各种stack, vector,我觉得STL这样用时挺适合的,不过慢一点!
与LYP的程序效率比对(都开-O3 与无限栈)
LYP 我的