nyoj ACM:吝啬的国度(bfs)

nyoj-20-吝啬的国度(深搜) 吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。 输入第一行输入一个整数M表示测试数据共有M(1 每组测试数据 阅读详情

吝啬的国度
时间限制:1000 ms | 内存限制:65535 KB
难度:3
描述
在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。
输入
第一行输入一个整数M表示测试数据共有M(1<=M<=5)组
每组测试数据的第一行输入一个正整数N(1<=N<=100000)和一个正整数S(1<=S<=100000),N表示城市的总个数,S表示参观者所在城市的编号
随后的N-1行,每行有两个正整数a,b(1<=a,b<=N),表示第a号城市和第b号城市之间有一条路连通。
输出
每组测试数据输N个正整数,其中,第i个数表示从S走到i号城市,必须要经过的上一个城市的编号。(其中i=S时,请输出-1)
样例输入
1
10 1
1 9
1 8
8 10
10 3
8 6
1 2
10 4
9 5
3 7
样例输出
-1 1 10 10 9 8 3 1 1 8

思路:
求前驱节点 , 或者 求最小步数 , 考虑 bfs 广度优先搜索

此地用 邻接链表存储图。
用 队 列 实现 bfs,没出一个节点,判断其以前有没有将他的子节点都存储到队列中了(根据flag),如果有,则直接pop(),并跳过改点,否则将其子节点都push()到队列中去。
邻接链表的头指针都存储在一个数组中,数组类型为struct head。其中f存储自己的前驱节点,flag表示自己之前是否被访问过,p为指针。


#include<stdio.h> 
#include<malloc.h>
struct node{
    int i;
    struct node* p;
};

struct head{
    int f;
    int flag;
    struct node* p;
};

void init(int* a);
void push(int* a,int S);
int pop(int* a);

int main()
{
    int M,N,S;
    int u,v;
    int i=0,j=0,k=0;
    int* a=0; 
    struct head* h=0; 
    struct node* q=0;
    scanf("%d",&M);
    for(i=1;i<=M;i++)
    {
        scanf("%d%d",&N,&S);
        h=(struct head*)malloc(sizeof(struct head)*(N+1));
        a=(int*)malloc(sizeof(int)*(2*N+1));
        for(j=1;j<=N;j++)
        {
            h[j].flag=0;
            h[j].f=0;
            h[j].p=NULL;
        }

        for(j=1;j<=N-1;j++)
        {
            scanf("%d%d",&u,&v);
            q=(struct node*)malloc(sizeof(struct node)*1);
            q->i=v;
            q->p=h[u].p;
            h[u].p=q;

            q=(struct node*)malloc(sizeof(struct node)*1);
            q->i=u;
            q->p=h[v].p;
            h[v].p=q;
        }
        h[S].f=-1;

        init(a);
        push(a,S);
        k=pop(a);
        while(k!=-1)
        {
            if(h[k].flag!=0)
            {
                k=pop(a);
                continue;
            }

            h[k].flag=1;
            q=h[k].p;

            while(q!=NULL)
            {
                push(a,q->i);
                if(h[q->i].f==0)
                {
                    h[q->i].f=k;
                }
                q=q->p;
            }
            k=pop(a);
        }

        for(j=1;j<=N;j++)
        {
            printf("%d ",h[j].f);
        }
        printf("\n");
    }

    return 0;
}

void init(int* a)
{
    a[0]=1;
    a[1]=2;
}
void push(int* a,int S)
{
    a[a[1]]=S;
    a[1]++;
}
int pop(int* a)
{
    if(a[0]==a[1]-1)
        return -1;

    a[0]++;
    return a[a[0]];
}
C# 上位机内存泄漏排查指南:3 个工具 + 4 个技巧,从 GC 频繁到稳定运行 720 小时 C# 上位机内存泄漏排查的核心是「先定位泄漏存在,再追溯引用根源,最后修复验证通过「Visual Studio 诊断工具(快速定位)+ dotMemory(深度分析)+ PerfView(生产监控)」三个工具的配合,结合「复现场景、排查静态成员+事件、检查非托管资源、GC 日志验证」四个技巧,可高效解决绝大多数泄漏问题。 阅读详情

相关推荐

TCGA之GDC-client工具下载安装与使用

文章主要是对GDC-client工具下载TCGA数据库数据整个过程的一个记录 1.下载GDC-client工具 GDC-client工具网址:GDC Data Transfer Tool | NCI Genomic Data Commons (cancer.gov) 我这里下的是上图中红圈中的版本, 2.解压安装 从网上了解的是不能解压到带中文的路径里,解压后是一个.exe文件,为了能直接在cmd命令行下使用,将其加入系统环境: 点击新建之后,输入将文件解压到的路径,然后...

better_strong的博客 1万+

吝啬的国度(建立双向联系 + 深度优先搜索)

1. 问题描述: 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。 输入 第一行输入一个整数M表示测试数据共有M(1<=M<=5)组 每组测试数据的第一行输入一个正整数N(1<=N<=100000...

二哈 593

硬件基础(4):(7)ADC电压采集:软件校准(标定、拟合)

在实际项目中,**软件端校准**可以有效弥补硬件方面(分压电阻误差、放大器失调、参考源误差等)带来的系统性偏差,从而提高 ADC 测量精度。下面是一个常见的**多点实测校准**流程与思路,个人感觉传感器标定的原理也只这样。

FCZlll的博客 6246

吝啬的国度(深度)

1、题目信息吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。输...

SICAUliuy的博客 282

告别编译失败:详解Keil MDK中ARM编译器V5与V6的区别及项目迁移选择

本文深入解析Keil MDK中ARM编译器V5与V6的核心差异,提供STM32项目迁移的完整指南。从代码生成策略、优化重点到语法支持,详细对比两版本特性,并给出项目兼容性评估框架和双版本共存配置方案,帮助开发者高效解决编译器版本冲突问题。

weixin_28684757的博客 516

Jetson Orin NX上CAN总线调试全攻略:从硬件焊接到开机自启动(附常见问题解决方案)

本文详细介绍了在NVIDIA Jetson Orin NX开发板上进行CAN总线调试的全过程,包括硬件焊接、驱动配置、通信测试和开机自启动设置。针对常见问题如信号接反、波特率设置等提供了实用解决方案,帮助开发者快速实现稳定的CAN总线通信。

c2d3e4f的博客 1076

吝啬的国度

时间限制:1秒 内存限制:128M。

coduck_lys的博客 347

unity | 动画模块之滚动选项框

动画模块之滚动选项框

菌菌兹的博客 2075

NYoj 20 深搜

是一道无根树转化为有根树的题目,暑假时迷迷糊糊的ac了,其实并没有理解其实质,,今天又重新做了一遍,才知道原来无根树转化为有根树实质就是一个深搜的过程,,把一条路径上的点都找出即可。。。题目: 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号...

hunxiejun 434

【Arduino 动手做】构建一个迷你 Las Vegas RGB LED 球体

《Arduino迷你拉斯维加斯球体项目:15岁少年的创意挑战》 15岁的Ben通过本项目展示了如何利用Arduino平台制作一个经济实惠的迷你拉斯维加斯球体夜灯。该项目涉及LED选择(采用WS2812B可编程灯带)、电子元件配置(含Arduino Nano微控制器和红外遥控)以及3D建模设计(100毫米直径球体)。项目难点包括LED布局优化、供电方案设计和3D打印外壳制作。Ben详细记录了从背景研究、电路设计到最终实现的完整过程,特别强调了分辨率与成本的平衡,以及如何通过白色扩散器改善视觉效果。这个项目不仅

雕爷学编程 1024

路由三大分类:直连路由、静态路由、动态路由

直连路由、静态路由和动态路由各有其独特的特点和适用场景。直连路由适用于简单的直接连接网络,静态路由提供了精确的路径控制,而动态路由则在大型复杂网络中展现出强大的适应性和自动化能力。了解和掌握这三种路由类型的配置和管理,对于网络管理员来说,是确保网络高效、安全运行的重要技能。

网络技术联盟站 4698

【图论入门】吝啬的国度

题目来自于nyist第20题 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。 输入 第一行输入一个整数M表示测试数据共有M(1 每组测试数据的第一行输入一个正整数N(1 随后的N-1行,每行有两个正整数a,b(1

github_36652477的博客 598

YOLOv8 WIOU

本文介绍了如何在YOLOv8中实现WIOU(Weighted Intersection over Union)的修改方法。主要修改了ultralytics/utils/metrics.py文件中的bbox_iou函数,新增了WIoU_Scale类,支持单调性FM v2、非单调性FM v3两种模式,并提供了动态调整的动量参数。修改后的函数支持多种IoU变体(GIoU、DIoU、CIoU等),通过数学公式实现了更精确的边界框回归损失计算,特别针对小目标检测场景进行了优化。该实现使用了PyTorch框架,包含完整

FJN110的博客 2055

ACM--BFS--图--nyoj 20--吝啬的国度

吝啬的国度                                                              时间限制:1000 ms  |  内存限制:65535 KB                                                                                         难度:3

戎码人生 942

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

吝啬的国度(深搜+vector)

描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。 输入第一行输入一个整数M表示测试数据共有M(1 每组测试数据的第一行输入一个正整数N(1 随后的N-1行,每行有两个正整数a,b(1 输出每组测试数据输N

ivyChen的专栏 476

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

吝啬的国度(超内存,未完成)

首先!这是个失败的小程序,程序没错,可以达到预期目的。但是,时间,内存都超出了要求。懒,以后有时间我会改进的。 吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必

weiyang_8765的博客 315

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

NYOJ 20 吝啬的国度 续

还是《吝啬的国度》,研读了别人的较为高效的代码,无论是时间开销,还是空间开销都要小很多啊,截图为证: 我的所有运行: 52ms的是我参照别人的写的代码,时间开销比我的小将近一半,内存开销仅有我的五分之一。 不过,我自己又将他的改进了一下,虽然内存稍稍大了点,但时间开销为40ms,排名第一啊,哈哈! WrongAnswer那次是因为忘了在递归中标记start,Runtim

Vector 2301

ACM20 吝啬的国度 Java

描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。 输入第一行输入一个整数M表示测试数据共有M(1 每组测试数据的第一行输入一个正整数N(1 随后的N-1行,每行有两个正整数a,b(1 输出每组测试数据输N

好玩的事情要记录下来~ 1276

NYOJ-20-吝啬的国度

描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。输入 第一行输入一个整数M表示测试数据共有M(1<=M<=5)组 每组测试数据的第一行输入一个正整数N(1<=N<=100000)和一个正整数S(1<=S<=100000),N表

逐梦者 596

吝啬的国度 NYOJ 20(深搜&广搜)

吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。输入第一行输入...

Never__give__up的博客 370

吝啬的国度(NYOJ 20)

吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。 输入第一行输入一个整数M表示测试数据共有M(1 每组测试数据

23333333 711
上一篇: 南工ACM:组合数
下一篇: nyoj ACM:幸运三角形
丁磊_Ml
博客等级 码龄11年 95粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值