【BZOJ4813】小Q的棋盘(CQOI2017)-贪心+DFS
来源:互联网 发布:新手学cnc编程要学多久 编辑:程序博客网 时间:2024/05/16 06:23
测试地址:小Q的棋盘
做法:这一题是之前做的,现在整理一下放在这里。
这一题应该使用DFS来完成。
注意到一个显然的结论:最优解中一条边一定不会被走过两次以上,而且走过一次的边一定会连成一条链。那么我们应该找到一条尽量长的从点0出发的链,在这条链上走一次能走到一个新点,这一点用DFS就可以求出。如果还剩下步数,那么就在路径中间伸出的枝杈上走两次来得到一个新点(有去有回),直到没有新点或者剩余步数不足为止,可以证明按这个方法找到的方案一定是最优的。复杂度
以下是本人代码:
#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>using namespace std;int v,n,first[110]={0},tot=0,ans,maxdep=0;struct edge {int v,next;} e[210];void insert(int a,int b){ e[++tot].v=b,e[tot].next=first[a],first[a]=tot;}void dfs(int v,int dep,int f){ maxdep=max(dep,maxdep); for(int i=first[v];i;i=e[i].next) if (e[i].v!=f) dfs(e[i].v,dep+1,v);}int main(){ scanf("%d%d",&v,&n); for(int i=1,a,b;i<v;i++) { scanf("%d%d",&a,&b); insert(a,b),insert(b,a); } dfs(0,0,-1); if (maxdep>n) printf("%d",n+1); else printf("%d",min(maxdep+(n-maxdep)/2+1,v)); return 0;}
阅读全文
0 0
- 【BZOJ4813】小Q的棋盘(CQOI2017)-贪心+DFS
- 贪心——BZOJ4813/Luogu3698 [CQOI2017]小Q的棋盘
- 【CQOI2017】bzoj4813 小Q的棋盘
- BZOJ4813: [Cqoi2017]小Q的棋盘
- BZOJ4813 [Cqoi2017]小Q的棋盘
- bzoj4813: [Cqoi2017]小Q的棋盘
- 【BZOJ4813】 [Cqoi2017]小Q的棋盘
- bzoj4813 [Cqoi2017]小Q的棋盘 树上DP
- cqoi2017,bzoj4813小Q的棋盘(树形dp或瞎搞)
- 【CQOI2017】小Q的棋盘
- CQOI2017 小Q的棋盘
- [bzoj4813][树形dp]小Q的棋盘
- bzoj 4813 [Cqoi2017]小Q的棋盘(思维)
- bzoj 4813 [Cqoi2017]小Q的棋盘
- BZOJ 4813 [Cqoi2017]小Q的棋盘
- 4813: [Cqoi2017]小Q的棋盘
- BZOJ 4813 [Cqoi2017]小Q的棋盘
- 4813: [Cqoi2017]小Q的棋盘
- ceph更换磁盘步骤
- python 爬虫某网站图片
- 深度学习的昨天_今天和明天
- 游戏设计 -- 资源缓存池
- 关键字
- 【BZOJ4813】小Q的棋盘(CQOI2017)-贪心+DFS
- 字符串
- 第六次作业
- 天气预报
- matlab的文件名字提取,及删除后缀
- struts2里的struts.xml中 当result的type="stream"
- iOS有关pop到self.navigationController.viewControllers以外的界面
- 去除UITableViewCell复用机制 的几种方法
- 欢迎使用CSDN-markdown编辑器