• 漂洋过海来看你


    Description

    BMan和hyx住在一个神奇的国度,这个国度有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。 现在BMan在第S号城市,他经常想起那个一起AC过的队友hyx,记忆它总是慢慢的累积,在他心中无法抹去,可是他并不知道hyx 在哪个城市,所以他决定用尽半年的积蓄漂洋过海去找hyx,现在BMan很想知道如果他想去hyx所在的第X号城市,必须经过的前 一个城市是第几号城市(放心,由于心系队友,BMan是不会选择走重复的路的~)

    Input

    第一行输入一个整数T表示测试数据共有T(1<=T<=10)组 每组测试数据的第一行输入一个正整数N(1<=N<=1000)和一个正整数S(1<=S<=1000),N表示城市的总数,S是BMan所在城市的编号 随后的N-1行,每行有两个正整数a,b(1<=a,b<=N),表示第a号城市和第b号城市之间有一条路连通。

    Output

    每组测试数据输N个正整数,其中,第i个数表示从S走到i号城市,必须要经过的上一个城市的编号(其中i=S时,请输出-1)

    Sample Input

    1 10 1 1 9 1 8 8 10 10 3 8 6 1 2 10 4 9 5 3 7

    Sample Output

    -1 1 10 10 9 8 3 1 1 8

    HINT

    因为只有N-1条路,相当于是树,没有环,所以去一个点只有一条路,用BFS搜一遍,记录上一个点就可以了。

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 #include <string>
     5 #include <algorithm>
     6 #include <queue>
     7 #include <vector>
     8 using namespace std;
     9 int T, N, S;
    10 #define maxn 1010
    11 vector <int> mp[maxn];
    12 int vis[maxn], pre[maxn];
    13 void bfs(){
    14     queue <int> q;
    15     pre[S] = -1;
    16     q.push(S);
    17     vis[S] = 1;
    18     while(!q.empty()){
    19         int u = q.front();
    20         q.pop();
    21         for(int i = 0; i < mp[u].size(); i++){
    22             if(vis[mp[u][i]] == 0){
    23                 q.push(mp[u][i]);
    24                 pre[mp[u][i]] = u;
    25                 vis[mp[u][i]] = 1;
    26             }
    27         }
    28     } 
    29 }
    30 int main(){
    31     scanf("%d", &T);
    32     while(T--){
    33         scanf("%d%d", &N, &S);
    34         for(int i  = 1; i <= N; i++) mp[i].clear();
    35         memset(vis, 0, sizeof(vis));
    36         memset(pre, 0, sizeof(pre));
    37         for(int i = 1; i <= N-1; i++){
    38             int a, b;
    39             scanf("%d%d", &a, &b);
    40             mp[a].push_back(b);
    41             mp[b].push_back(a);
    42         }
    43         bfs();
    44         for(int i = 1; i <= N; i++){
    45             if(i == 1) printf("%d", pre[1]);
    46             else printf(" %d",pre[i]);
    47         }
    48         printf("
    ");
    49     }
    50     return 0;
    51 }
  • 相关阅读:
    Voice over IP
    [转】:TCP/IP详解学习笔记(5)
    windows phone 7 version: ObservableCollectionEx (1)
    MA0003 移动智能网原理
    TCP 网络书籍
    windows Phone 7如何实现background的情况下不丢失数据
    最近想要学习和了解的东东
    Windows phone 7 开发注意事项
    android Tab标签下得按钮
    新浪微博教程(一)
  • 原文地址:https://www.cnblogs.com/titicia/p/4342125.html
Copyright © 2020-2023  润新知