zoukankan      html  css  js  c++  java
  • 【ACM】吝啬的国度

    吝啬的国度

    时间限制: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 <iostream>
    #include <string>
    #include <cstdio>
    #include <cmath>
    #include <vector>
    
    using namespace std;
    int *a;
    vector<int> *v;
    int m;
    
    void DFS(int cur){
    
        for (int i = 0 ; i < v[cur].size() ;i++)
        {
            if (a[v[cur][i]]!=0)
            {
                continue;
            }
            a[v[cur][i]] = cur;
            DFS(v[cur][i]);
        }
        
    }
    
    int main(){
    
        int n;
        cin>>n;
        while (n--)
        {
            int cur;
            cin>>m>>cur;
    
            a = new int[m+1];
            for (int z = 0; z < m+1 ; z++)
            {
                a[z] = 0;
            }
            v = new vector<int>[m+1];
            int x,y;
            for (int i = 1 ; i < m ; i++)
            {
                cin>>x>>y;
                v[x].push_back(y);
                v[y].push_back(x);
            }
            
            DFS(cur);
            int k;
            for (k = 0; k < m-1 ;k++)
            {
                if (k+1==cur)
                {
                    cout<<"-1 ";
                }else
                {
                    cout<<a[k+1]<<" ";
                }
            }
            if (k+1==cur)
            {
                cout<<"-1"<<endl;
            }
            else
            {
                cout<<a[k+1]<<endl;
            }
        }
    
        return 0;
    }        
  • 相关阅读:
    收银钱箱弹出设置
    IOS4.0 实例练习时钟
    mysql 日期查询操作 copy
    ios 学习笔记 2
    SVN 不能移动 xx\entries 到 xx\entries
    做一个基于PHPCMS V9架构的商城
    基于JDBC API 的事务管理代码示例
    mysql 数据类型
    Discuz!NT CreditsOperationType
    spring 事务传播行为
  • 原文地址:https://www.cnblogs.com/lyc94620/p/9289226.html
Copyright © 2011-2022 走看看