zoukankan      html  css  js  c++  java
  • zzulioj--1711--漂洋过海来看你(dfs+vector)

    1711: 漂洋过海来看你

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 89  Solved: 33

    SubmitStatusWeb Board

    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

    110 11 91 88 1010 38 61 210 49 53 7

    Sample Output

    -1 1 10 10 9 8 3 1 1 8

    HINT

    Source

    2015广东工业大学ACM校赛-初赛


    #include<stdio.h>
    #include<string.h>
    #include<vector>
    using namespace std;
    int b[1010];
    vector<int>g[1010];
    void dfs(int x)
    {
    	for(int i=0;i<g[x].size();i++)
    	{
    		if(b[g[x][i]]) continue;
    		b[g[x][i]]=x;
    		dfs(g[x][i]);
    	}
    }
    int main()
    {
    	int t;
    	scanf("%d",&t);
    	while(t--)
    	{
    		int n,s,x,y;
    		scanf("%d%d",&n,&s);
    		memset(b,0,sizeof(b));
    		for(int i=1;i<n;i++)
    		g[i].clear();
    		for(int i=1;i<n;i++)
    		{
    			scanf("%d%d",&x,&y);
    			g[x].push_back(y);
    			g[y].push_back(x);
    		}
    		b[s]=-1;
    		dfs(s);
    		for(int i=1;i<=n;i++)
    		{
    			if(i>1)
    			printf(" ");
    			printf("%d",b[i]);
    		}
    		printf("
    ");
    	}
    	return 0;
    }


  • 相关阅读:
    打造自己的 C# WinForm 应用程序的 SQL Server 连接配置界面
    怎么修改app.config的值
    将DATATABLE中的数据导入到数据库中
    C# 多线程使用progressBar进度条控件
    程序员技术练级攻略2
    c#中Setting.setting的使用
    该行已经属于另一个表
    Microsoft 数据访问技术的过去、现在和未来
    Winform专栏
    在 C# 中使用设置 Settings.settings
  • 原文地址:https://www.cnblogs.com/playboy307/p/5273582.html
Copyright © 2011-2022 走看看