• 南阳20--吝啬的国度


    吝啬的国度

    时间限制: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 
    来源
    经典题目
    上传者

    张云聪

    题目应该是建立双向边, 用邻接表时注意数组大小, 利用邻接表搜索相邻点标记为上一层点。

    #include <queue>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    using namespace std; 
    struct Node
    {
        int from, to, next;
    } node[100010*2];
    int head[100010], cnt;
    void Add(int a, int b)
    {
        Node E = {a, b, head[a]};
        node[cnt] = E;
        head[a] = cnt++;    

    int father[100010], src;
    void Deal()
    {
        queue<int> Q;
        Q.push(src); 
        while(!Q.empty())
        {
            int u = Q.front(); Q.pop();
            for(int i = head[u]; i != -1; i = node[i].next)
            {
                int  v = node[i].to; 
                if(!father[v])
                {
                    father[v] = u;    
                    Q.push(v);
                } 
            }
        }
    }
    int main()
    {
        int T;
        scanf("%d", &T);
        while(T--)
        {    
            int K;   cnt = 0;
            scanf("%d %d", &K, &src);
            memset(head, -1sizeof(head));
            memset(father, 0sizeof(father));
            for(int i = 0; i < K - 1; i++)
            {
                int a, b;
                scanf("%d %d", &a, &b);
                Add(a, b);
                Add(b, a);
            }
            Deal();
            for(int i = 1; i <= K; i++)
            {
                if(i == src)
                    printf("-1 ");
                else
                    printf("%d ", father[i]); 
            }
            printf(" "); 
        }
        return 0;    
  • 相关阅读:
    Xcode7.x中安装Alcatraz
    iOS开发:一个无限滚动自动播放图片的Demo(Swift语言编码)
    ios开发:一个音乐播放器的设计与实现
    iOS开发:深入理解GCD 第二篇(dispatch_group、dispatch_barrier、基于线程安全的多读单写)
    iOS开发:XCTest单元测试(附上一个单例的测试代码)
    设计模式之构造者模式
    控制流程
    变量与常量定义
    go语言内置基础类型
    解决Win10 Virtualbox5.2.18桥接不能联网小记
  • 原文地址:https://www.cnblogs.com/soTired/p/4778336.html
Copyright © 2020-2023  润新知