首页 > TAG信息列表 > P1041
P1041 传染病控制
倍感自己傻逼 错的地方极其智障,一定不会犯了 打死不用vectorXD #include<bits/stdc++.h>using namespace std;int mp[350][350],a,b,p,n,flo[350][350],gt[350][350],ans,size[350],cnt[350],tag[350];void dfs(int u,int dep,int fa){ cnt[u]=1; for(int i=1;i<=P1041 传染病控制 解题报告
题目 题意简述 在一颗树中的每个深度找出一些不重合的子树,使所有子树的大小之和最大。 解题思路 直接暴力dfs(枚举)方案,好像想不到特别有用的剪枝,就打了朴素的搜索,结果就过了(数据范围小) 先从根节点 dfs 遍历整棵树,把会用到的信息都记录下来(节点的深度,每个节点的子树大小) 为了后面搜洛谷 题解 P1041 【传染病控制】
【思路】 题目给出一棵树。第\(i\)步拆的一定是第\(i\)层与第\(i+1\)层之间的连边,否则不是最优(自行证明即可),所以可以暴力枚举每一次拆哪一个节点与上一个节点的连边。 把所有节点所在的层数存下来,一号点在第\(1\)层,枚举每一层的每个节点(由于\(1\)号节点已经被感染,从第二层开始搜索