P4572题解
sleeplycat · · 题解
虽然但是这是蒟蒻第一次写灰题
题意:
军队从树的根部开始,
有可能花费一个小时进入任意一个子节点,
必须有人能够激活可能进入的子节点的魔法(不能重复),
当军队进入选中的子节点时,上一次用的人可以立刻到可能进入的任意子节点,如果人手不够可以增加。
听不懂?往下看↓
思路:
图论不会还不能画图吗?
首先从根节点开始进入:
那么可能进入的子节点就是
那么马上就会有人到
因此
伏地魔:先收了
所以此时伏地魔大军来到了
霍格沃茨的人反应很快,立刻到了接下来的可能的结点:
因为求的是至少,那么考虑最差情况!!!
然后凤凰社的这堆祸害OI的人奆佬就屁颠屁颠地跑到了
因此
这个过程写个深搜就好了
void dfs(int f, int idx, int tot, int time){
/*
** 当大军走到idx这个点的时候,必须修建好idx的子节点
** tot需要记录idx的子节点子节点的个数,time即时间变化
** 计算此时需要的人数并与原res比较
*/
tot+=v[idx].size(); //也是参考了楼顶才发现要+=而不是=
res=max(res,(int)ceil(tot/time));
for(int i=0;i<v[idx].size();i++){//枚举所有子节点
if(v[i][idx]!=f) dfs(idx,v[i][idx],tot,time+1); //蒟蒻这里写反了然后全RE,,
}
}