bzoj1086 王室联邦 dfs
2015-12-03 20:15
239 查看
看到题目完全不会做的样子。为什么是<=3b??这个3有什么用?n才1000是不是可以动态规划比如f[i][x]表示以i为根i在大小为x的块中?然而转移方程似乎比较复杂,应该是一个分组背包一样的东西。关键是输出分类方法,这怎么输出啊。。于是果断翻题解。
意料之外情理之中。一遍dfs即可。注意到以x为根节点时,其儿子s,则子树s中与s相连的节点的连通块,如果要构成一个省,既可以s作为省会还可以x作为省会。如果用s作为省会,那s的子树<b怎么办?所以以x为省会。这样将x的子树中没有标号的每超过b个就连成一个省份。当然如果以x为节点的树小于b,那就在x的父节点中操作。由于是从下往上操作,所以那些没有标号的一定与x的其中一个儿子s构成连通块。那为什么是3b呢?这样不是2b就够了吗?考虑到对于根节点r,最后还剩下小于b个的节点没有省份,这样将剩下来的点并入最后一个省份,以x为省会即可。
考虑操作。显然这需要一个栈来维护,每次回去之前将x加入栈里面。然后栈中在当前树中的节点超过b个时就将这b个放到一个省里。
代码还是很简单的,如下(注意到代码里没有无解的情况,因为b<=n所以显然有解啊):
by lych
2015.12.1
意料之外情理之中。一遍dfs即可。注意到以x为根节点时,其儿子s,则子树s中与s相连的节点的连通块,如果要构成一个省,既可以s作为省会还可以x作为省会。如果用s作为省会,那s的子树<b怎么办?所以以x为省会。这样将x的子树中没有标号的每超过b个就连成一个省份。当然如果以x为节点的树小于b,那就在x的父节点中操作。由于是从下往上操作,所以那些没有标号的一定与x的其中一个儿子s构成连通块。那为什么是3b呢?这样不是2b就够了吗?考虑到对于根节点r,最后还剩下小于b个的节点没有省份,这样将剩下来的点并入最后一个省份,以x为省会即可。
考虑操作。显然这需要一个栈来维护,每次回去之前将x加入栈里面。然后栈中在当前树中的节点超过b个时就将这b个放到一个省里。
代码还是很简单的,如下(注意到代码里没有无解的情况,因为b<=n所以显然有解啊):
#include<iostream> #include<cstdio> #include<cstring> #define N 2005 using namespace std; int n,m,tot,tp,cnt,fst ,pnt ,nxt ,stk ,a ,c ; void add(int aa,int bb){ pnt[++tot]=bb; nxt[tot]=fst[aa]; fst[aa]=tot; } void dfs(int x,int fa){ int p,last=tp; for (p=fst[x]; p; p=nxt[p]){ int y=pnt[p]; if (y==fa) continue; dfs(y,x); if (tp-last>=m){ c[++cnt]=x; while (tp>last) a[stk[tp--]]=cnt; } } stk[++tp]=x; } int main(){ scanf("%d%d",&n,&m); int i; for (i=1; i<n; i++){ int x,y; scanf("%d%d",&x,&y); add(x,y); add(y,x); } dfs(1,0); while (tp) a[stk[tp--]]=cnt; printf("%d\n",cnt); for (i=1; i<n; i++) printf("%d ",a[i]); printf("%d\n",a ); for (i=1; i<cnt; i++) printf("%d ",c[i]); printf("%d\n",c[cnt]); }
by lych
2015.12.1
相关文章推荐
- 增量模型
- 快速原型模型
- HDU - 1754
- 关于嵌入文本框设置只读后,后台获取不到值--解决办法
- [置顶] Spring MVC POST中文乱码解决方案
- Linux 下iptables相关配置
- Android获取Bluetooth设备信号RSSI值得流程
- OpenCV相机标定calibrateCamera坐标系详解
- Post同步异步
- if switch练习(体重)
- 迭代模型
- CodeForces - 27E--Number With The Given Amount Of Divisors(反素数)
- 【PHP7】- 编译安装与新特性初体验
- quartz简单定时任务示例
- 排除中兴F607光猫无法拨打部分电话号码的故障
- python 简单爬虫实现
- 瀑布模型
- 边做边改模型
- 【android_温故知新】View 类的 XML 属性及相关方法说明
- 1087. All Roads Lead to Rome (30)