搜索
克莉丝汀娜
此时一名自称平民的玩家路过
展开
-
uva 11624 Fire (BFS)
迷宫中有障碍格、火格。着火的格子每分钟向上下左右四个方向蔓延。问能否走出迷宫,求最短时间。简单BFS,见大白书307页。#includeusing namespace std;typedef unsigned long long uLL;typedef long long LL;typedef double db;#define inf 0x3f3f3f3fch原创 2015-06-09 18:38:44 · 361 阅读 · 0 评论 -
CCF 201409-4 最优配餐(BFS)
问题描述 栋栋最近开了一家餐饮连锁店,提供外卖服务。随着连锁店越来越多,怎么合理的给客户送餐成为了一个急需解决的问题。 栋栋的连锁店所在的区域可以看成是一个n×n的方格图(如下图所示),方格的格点上的位置上可能包含栋栋的分店(绿色标注)或者客户(蓝色标注),有一些格点是不能经过的(红色标注)。 方格图中的线表示可以行走的道路,相邻两个格点的距离为1。栋栋要送餐必须走可以行走的道路原创 2015-09-06 19:27:01 · 1264 阅读 · 1 评论 -
hiho 1233 Boxes(状态压缩+BFS)
题目大意:给n(n最多只有7个数,首先可以把输入的数离散化处理一下。对于每一个数,考虑用三位二进制数来表示其位置。那么对于n个数,有2^(3*n)种状态。假设第i个位置上的数为a[i],可用1*8^a[1]+2*8^a[2]+3*8^a[3]+……+n*8^a[n]来表示每一个状态s。如何根据当前状态确定某个数a[i]的位置?设当前状态为s,则(s/(8^a[i]))%原创 2015-09-22 20:09:31 · 457 阅读 · 0 评论 -
CCF 201312-5 I’m stuck!(BFS)
问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S', 'T'七个字符中的一个,分别表示如下意思: '#': 任何时候玩家都不能移动到此方格; '+': 当玩家到达这一方格后,下一步可以向上下左右四个方向相邻的任意一个非'#'方格移动一格; '-': 当玩家到达这一方格后,下一步可以向左右两个方向相邻的一个非'#'原创 2015-09-04 19:06:40 · 3068 阅读 · 1 评论 -
poj 1330 Defragment (最近公共祖先)
给出一棵树的父子关系,求指定的两个结点的最近公共祖先。关于最近公共祖先(LCA)的资料如下:资料1LCA问题的tarjan算法由于存在父子关系,因此建图的时候建立的是有向边,在进行dfs前,需要找到根节点(入度为0),从该结点开始DFS。#include#include#include#include#include#include#incl原创 2015-08-26 18:25:36 · 403 阅读 · 0 评论 -
hdu 5379 Mahjong tree
题目大意:给一棵树上的结点编号,满足:1、每个结点的子节点编号连续。2、每个节点下的子树的编号连续。求总的方案数。分析:可以发现每个节点的非叶子儿子结点最多只能有两个,因为如果多于两个,不妨设编号为k+1,k+2,……,k+n,由于要满足条件2,则除了k+n这个结点的子结点可以继续往下编号,其他的结点的子节点都无法再进行编号(无法满足条件2)对于某个结点原创 2015-08-12 12:15:46 · 396 阅读 · 0 评论 -
最近公共祖先(LCA)详解
LCA问题(Least Common Ancestors,最近公共祖先问题),是指给定一棵有根树T,给出若干个查询LCA(u, v)(通常查询数量较大),每次求树T中两个顶点u和v的最近公共祖先,即找一个节点,同时是u和v的祖先,并且深度尽可能大(尽可能远离树根)。LCA问题有很多解法:线段树、Tarjan算法、跳表、RMQ与LCA互相转化等。本文主要讲解Tarjan算法的原理及详细实现。转载 2015-08-26 11:09:12 · 3539 阅读 · 0 评论 -
uva 10047 独轮车
#includeusing namespace std;struct P{ int x,y,d,c,t;};char M[30][30];bool vis[30][30][4][5];int main(){ int m,n,i,j,T=1,flag=0; while(~scanf("%d%d",&m,&n)&&(m+n)) { mem原创 2015-06-10 19:00:23 · 966 阅读 · 0 评论 -
Om Nom and Dark Park
传送门题目大意:一颗深度为n+1的满二叉树,根结点编号为1。现在要增加一些边的边权,使根结点到每个叶子节点所经过的边权之和相等。求增加的最小值。分析:对于一个节点到两个子节点,若两边边权不相等,则需要增加较少的一边的边权,使其相等。从而可以自下而上,依次求出两个子节点到根节点边权的差值,累加即可。每次求出差值后,还应当将较大的边权累加到其父节点到其祖父结点的边权上,保证一致性。#i原创 2015-04-05 21:27:19 · 695 阅读 · 0 评论 -
codeforces 9C
题目大意:给出数n(1分析:1位数:12位数:10、113位数:100、101、110、111……即有:k位数:a、bk+1位数:a*10,a*10+1,b*10,b*10+1。 #includeusing namespace std;int ans=0;void get(int x,int n){ if(x>n) return; +原创 2015-03-30 22:51:46 · 714 阅读 · 0 评论 -
507C (DFS)
//给一颗深度为H的满二叉树,从根节点开始,按照LRLRLR……的访问顺序依次访问结点,问访问到最后一层的第N个结点(出口)时,共访问了多少个结点。//分两种情况考虑://1、如果在第h层向左(右)走,而出口位于当前结点的右(左)子树时,需把当前结点的左(右)子树的所有结点全部访问才能访问其右(左)子树。//2、如果在第h层左(右)走,出口位于当前结点的左(右)子树,则问题转化为深原创 2015-03-26 09:39:10 · 728 阅读 · 0 评论 -
hdu 5179 (DFS)
求区间[L,R]内的beautiful number的个数。求出不超过L、R的beautiful number的个数sum(L),sum(R),结果即为sum(R)-sum(L-1)对于一个数num,从低位开始构造,由1开始枚举。若num大于当前构造的数则继续递归,否则返回结果。#include#include#include#include#include#incl原创 2015-03-26 16:00:44 · 445 阅读 · 0 评论 -
hdu 5444 Elven Postman (DFS)
读懂题意就是个水题了。给一棵树,左儿子权值大于其父亲,右儿子权值小于其父亲。给出若干询问,输出从根节点到指定节点的路径。#include#include#includeusing namespace std;struct Node{ int l,r;}p[1001];void add(int u,int a){ if(p[u].l==0&&原创 2015-09-14 17:42:40 · 612 阅读 · 2 评论