HDU 4707 Pet 邻接表实现
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4707
解题报告:题目大意是在无向图G中有n个点,分别从0 到n-1编号,然后在这些点之间有n-1条边,可以保证这个图是连通图,并且每条边的长度都是1,然后让你求出从编号为0的点出发,到其它的点的距离大于d的点的个数。
这题的点的个数有500000个,而内存限制为32M,很显然,开邻接矩阵不行,但这题实际上不需要记录边只需要开一位数组就可以了,但是我为了练习一下邻接矩阵的写法,特地用邻接矩阵另外写了一个代码。第一次写邻接矩阵,一开始忘了标记已经走过的点,造成dfs的时候陷入了死循环,一运行就挂了,很明显爆栈了,找了好久,才发现原来走过的点如果不标记还会再走一遍。还有一个很重要的点就是,每组数据结束之后,不要忘记清理内存,不然还是会MLE。然后这题如果不用邻接表写的话,直接定义一个一位数组也行,因为题目虽然没有说,但是实际上题目输入的数据是有顺序的,就是按照从0点开始往其它的点走的顺序来输入的,很显然,这样就方便多了。
邻接表AC代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn = ; struct Node
{
int d;
Node *next;
}; typedef struct node
{
int num;
Node * next;
node()
{
num = ;
next = NULL;
}
}LinkList; int length[maxn],visit[maxn]; void push(LinkList *Link,int s,int e)
{
int k = Link[s].num - ;
Node *p = Link[s].next;
Node *q = new Node;
q->d = e;
q->next = NULL;
if(p == NULL)
Link[s].next = q;
else
{
while(k--)
p = p->next;
p->next = q;
}
Link[s].num++;
}
void Delete(Node *p)
{
if(p == NULL)
return ;
Delete(p->next);
delete p;
} void clean(LinkList *Link,int n)
{
for(int i = ;i < n;++i)
Delete(Link[i].next);
} void dfs(LinkList *head,int l,int deep)
{
length[l] = deep;
visit[l] = ;
int k = head[l].num;
Node *p = head[l].next;
while(p != NULL)
{
if(visit[p->d] == )
dfs(head,p->d,deep+);
p = p->next;
}
} int main()
{
int T,n,d,a,b;
scanf("%d",&T);
while(T--)
{
LinkList Link[maxn];
scanf("%d%d",&n,&d);
for(int i = ;i<n;++i)
{
scanf("%d%d",&a,&b);
push(Link,a,b);
push(Link,b,a);
}
memset(length,,sizeof(length));
memset(visit,,sizeof(visit));
dfs(Link,,);
int tot = ;
for(int i = ;i < n;++i)
if(length[i] > d)
tot++;
printf("%d\n",tot);
clean(Link,n);
}
return ;
}
一维数组AC代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std; const int maxn = ;
int len[maxn]; int main()
{
int T,n,d,s,e;
scanf("%d",&T);
while(T--)
{
scanf("%d %d",&n,&d);
memset(len,,sizeof(len));
for(int i = ;i < n;++i)
{
scanf("%d %d",&s,&e);
if(len[s]) len[e] = len[s] + ;
else if(s == ) len[e] = ;
else ;
}
int tot = ;
for(int i = ;i < n;++i)
if(len[i] > d)
tot++;
printf("%d\n",tot);
}
return ;
}
HDU 4707 Pet 邻接表实现的更多相关文章
- hdu 4707 Pet(DFS && 邻接表)
Pet Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- hdu 4707 Pet(DFS水过)
http://acm.hdu.edu.cn/showproblem.php?pid=4707 [题目大意]: Lin Ji 的宠物鼠丢了,在校园里寻找,已知Lin Ji 在0的位置,输入N D,N表示 ...
- HDU 4707 Pet(BFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4707 题目大意:在一个无环的,从0开始发散状的地图里,找出各个距离0大于d的点的个数 Sample I ...
- hdu 4707 Pet【BFS求树的深度】
Pet Time Limit: 4000/2000 MS (Java/Others) ...
- HDU 4707:Pet
Pet Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- HDU 4707 Pet(DFS(深度优先搜索)+BFS(广度优先搜索))
Pet Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissio ...
- hdu 4707 Pet 2013年ICPC热身赛A题 dfs水题
题意:linji的仓鼠丢了,他要找回仓鼠,他在房间0放了一块奶酪,按照抓鼠手册所说,这块奶酪可以吸引距离它D的仓鼠,但是仓鼠还是没有出现,现在给出一张关系图,表示各个房间的关系,相邻房间距离为1,而且 ...
- HDU 4707 Pet (水题)
Pet Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- hdu 4707 Pet hdu 2013 Asia Regional Online —— Warmup
一道简单的搜索题目,建一个树,根节点是 0 ,连接的两个节点的距离是 1 ,求 到 根节点长度是2的节点的个数. #include<stdio.h> #include<string. ...
随机推荐
- 最近JavaScript的一些收获
开发习惯的上的收获 1,开发过程中,要让整个逻辑展示在一个函数中,中间部分则做可以考虑公用策略优化 2,开发完成至少有三个角度进行测试,正面方面和中立 开发技巧上面的收获 1,驼峰转为‘-’以及‘-’ ...
- 通达OA工作流主要表的数据结构
flow_run_prcs 流程执行明细 字段名称 类型 中文 说明 RUN_ID 数值 流水号(关键字段) 每发起一个工作流,即创建一个全局唯一的流水号 PRCS_ID 数值 执行步骤序号 USER ...
- pygame学习笔记(6)——一个超级简单的游戏
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 学了这么长时间的Pygame,一直想写个游戏实战一下.看起来很简单的游戏,写其来怎么这么难.最初想写个俄罗斯方块 ...
- 一次DHCP故障排错
关于DHCP授权,我一直遇到这样一个问题:服务器明明已经在授权列表中了,但是服务就是起不来,看日志会告诉你服务器未授权或者局域网内已有DHCP服务器,但是实际上却并不是这样.现在终于知道原因了,老旧D ...
- [转帖] 红帽8.0 beta版本发布 内核新版本 4.18
Red Hat Enterprise Linux 8 Beta 现已发布! https://www.oschina.net/news/101870/red-hat-enterprise-linux-8 ...
- 【百度】大型网站的HTTPS实践(一)——HTTPS协议和原理
大型网站的HTTPS实践(一)——HTTPS协议和原理 原创 网络通信/物联网 作者:AIOps智能运维 时间:2018-11-09 15:07:39 349 0 前言 百度于2015年上线了全站 ...
- Windows 作为 openssl server端时的处理
1. 跟上一个博客一样, 下载openssh 然后安装时 同时选择 server端. 2. 安装时设置密码 其他默认即可 3. xshell 创建连接. 注意 我使用的是 administrator ...
- ACM数论之旅17---反演定理 第一回 二项式反演(神说要有光 于是就有了光(´・ω・`))
终于讲到反演定理了,反演定理这种东西记一下公式就好了,反正我是证明不出来的~(-o ̄▽ ̄)-o 首先,著名的反演公式 我先简单的写一下o( ̄ヘ ̄*o) 比如下面这个公式 f(n) = g(1) + g ...
- ctex2.9.2输出中文
安装了ctex2.9.2,打开WinEdt7.0 准备编译论文, 但是中文的地方都是空白,不显示, 到网上找了N个方法,就是引入CJK包,然后加入一下CJK命令来控制中文显示, 结果搞得乱七八糟,还是 ...
- CF992C Nastya and a Wardrobe
我是题面 题意很清晰,这种题,我们当然还是有两种方法来做啦 方法一:找规律 读完题我们来看样例,通过样例一已我们大概可以看出,答案或许是\(n*2^{k+1}\) 肯定不能这么简单对吧,那就来看样例二 ...