NYOJ 20吝啬的国度(vector容器+dfs||邻接表+dfs)

来源:互联网 发布:qq聊天软件 编辑:程序博客网 时间:2024/05/15 21:01
描述
在一个吝啬的国度里有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)
样例输入
110 11 91 88 1010 38 61 210 49 53 7
样例输出
-1 1 10 10 9 8 3 1 1 8

第一次用(逃

ac代码:
#include<stdio.h>#include<iostream>#include<vector>using namespace std;int num,bz[100001],last[100001],n,m,q,w; vector<int>map[100001];//容器 void dfs(int v) {     bz[v]=1;     last[v]=num;     for(int i=0;i<map[v].size();i++)//深搜     {         if(bz[map[v][i]]==0)         {             num=v;             dfs(map[v][i]);         }     } } int main() {     int t,i;     scanf("%d",&t);     while(t--)     {         scanf("%d%d",&n,&m);         for(i=0;i<=n;i++)         bz[i]=0;         for(i=0;i<=n;i++)         {         map[i].clear();        }          for(i=1;i<n;i++)         {             scanf("%d%d",&q,&w);             map[q].push_back(w);             map[w].push_back(q);         }         num=-1;         dfs(m);         for(i=1;i<n+1;i++)         printf("%d ",last[i]);         printf("\n");     }     return 0; }


邻接表:

#include<stdio.h>#include<string.h>#include<math.h>#include<iostream>#include<algorithm>#include<queue>#define MAXN 100100#define INF 0xfffffff#define max(a,b) a>b?a:b#define min(a,b) a>b?b:ausing namespace std;struct Edge{int from,to;int next;}edge[MAXN];int head[MAXN];//bool vis[MAXN];int num,bz,ss;int vis[MAXN];void Add(int u,int v){Edge E={u,v,head[u]};edge[num]=E;head[u]=num++;}void DFS(int s,int e){//int i;if(bz)return;for(int i=head[s];i!=-1;i=edge[i].next){if(vis[edge[i].to]) continue;if(edge[i].to==e){//printf("%d ",edge[i].from);ss=edge[i].from;bz=1;return ;}vis[edge[i].to]=1;DFS(edge[i].to,e);vis[edge[i].to]=0;}}int main(){int T;int i;int a,b;int n,s;scanf("%d",&T);while(T--){num=0;memset(head,-1,sizeof(head));scanf("%d%d",&n,&s);for(i=1;i<n;++i){scanf("%d%d",&a,&b);Add(a,b);Add(b,a);}int num;for(i=1;i<=n;++i){if(i==s){printf(i==n?"-1\n":"-1 ");continue;}bz=0;memset(vis,0,sizeof(vis));DFS(s,i);printf(i==n?"%d\n":"%d ",ss);}}return 0;}



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕2个月血糖高怎么办 怀孕7个月血糖高怎么办 孕妇7个月血糖高怎么办 空腹血糖6%2e7怎么办 血糖和尿酸都高怎么办 血糖高的孕妇便秘怎么办 血糖低怎么办吃什么好 孕检空腹血糖高怎么办 怀孕4个月血糖高怎么办 怀孕3个月血糖高怎么办 怀孕6个月血糖高怎么办 孕29周血糖高怎么办 餐后血糖偶尔高怎么办 歺后血糖9.8高怎么办 怀孕5个月血糖高怎么办 歺后2小时血糖高怎么办 怀孕餐后血糖高怎么办 老人餐后血糖高怎么办 血糖高尿糖不高怎么办 小孩鼻子不通气怎么办特效方法 婴儿20天不大便怎么办 新生儿8天没大便怎么办 新生儿2天没大便怎么办 新生儿4天没大便怎么办 2岁宝宝便秘严重怎么办 婴儿7天没有大便怎么办 新生儿6天没大便怎么办 大便带鲜血 不疼怎么办 宝宝发烧到39度怎么办 肛裂大便出鲜血怎么办 拉大便有血怎么办啊 长痔疮拉大便血怎么办 病人卧床太久不解大便怎么办 宝宝拉泡沫便便怎么办 孩子拉肚子怎么办呢有好办法吗 2岁宝宝大便带血怎么办 十个月宝宝肛裂怎么办 大便时拉出血怎么办啊 2岁宝宝大便干燥怎么办 5岁儿童大便干燥怎么办 九个月宝宝平血怎么办