hrbust 1326 哈理工oj 1326 Leyni的国家【DFS+邻接表建图】
来源:互联网 发布:淘宝模板的作用 编辑:程序博客网 时间:2024/06/06 20:43
Leyni的国家Time Limit: 1000 MSMemory Limit: 65536 KTotal Submit: 74(29 users)Total Accepted: 42(27 users)Rating: Special Judge: NoDescription
Leyni经过了若干年的征战,终于建立了自己的国家,这个国家包含n个城市,编号为1到n。城市c是首都,每条城市中的路都是双向的,而且从首都到每个城市都只存在一条路线。
在Leyni的国家,他使用一种奇怪的方式来描述地图:对每一个非首都城市记录了一个数字pi,代表着从首都到城市i的路线中在到达城市i之前经过的最后一个城市的编号。
但是现在,Leyni计划将首都由城市c改为城市k,所以需要你按照他的国家的地图描述方式做出新地图,请你帮助他!
Input本题有多组测试数据,输入的第一行是一个整数T代表着测试数据的数量,接下来是T组测试数据。
对于每组测试数据:
第1行 包含三个以空格分隔的整数n,c,k (2 ≤ n ≤ 50000, 1 ≤ c ≠ k ≤ n)。
第2行 包含以空格分隔的n – 1个整数,代表着原地图的内容。整数分别对应着p1,p2,…,pc – 1,pc + 1,…,pn – 1,pn(注意不含pc)。
Output对于每组测试数据:
第1行 输出以空格分隔的n – 1个整数,代表着新地图的内容。整数分别对应着p1,p2,…,pk – 1,pk + 1,…,pn – 1,pn(注意不含pk)。
Sample Input2
3 2 3
2 2
6 2 4
6 1 2 4 2
Sample Output2 3
6 4 1 4 2
Source哈理工2012春季校赛热身赛 2012.04.03Author齐达拉图@HRBUST这个题容易错的点就是在建图的时候出现错误。一开始还呆呆的建上了六条边T__T。后来改成4条边,最后改成两条边AC......
对于n-1条边我们足够建成一颗树,所以我们在建边的时候不需要建多余的边,只要建从p到i的边就可以了。
建成了树之后从节点k开始dfs即可,dfs每从x找到一个节点u,记录ans【u】=x。
AC代码:
#include<stdio.h>#include<string.h>#include<vector>using namespace std;vector<int >mp[50005];int p[50005];int vis[50005];int ans[50005];int ok;int output;void dfs(int x){ for(int i=0;i<mp[x].size();i++) { int u=mp[x][i]; if(vis[u]==0&&ans[u]==0) { vis[u]=1; ans[u]=x; dfs(u); } }}int main(){ int t; scanf("%d",&t); while(t--) { int n,c,k; scanf("%d%d%d",&n,&c,&k); for(int i=1;i<=n;i++) { mp[i].clear(); } for(int i=1;i<=n;i++) { if(i!=c) { scanf("%d",&p[i]); if(p[i]!=c) { mp[p[i]].push_back(i); mp[i].push_back(p[i]); // } else { mp[c].push_back(i); mp[i].push_back(c); } } } memset(ans,0,sizeof(ans)); memset(vis,0,sizeof(vis)); dfs(k); int f=0; for(int i=1;i<=n;i++) { if(i!=k) { if(f==0) printf("%d",ans[i]); else printf(" %d",ans[i]); f++; } } printf("\n"); }}
0 0
- hrbust 1326 哈理工oj 1326 Leyni的国家【DFS+邻接表建图】
- hrbust 1954 哈理工oj 1954 神奇的国家【图论+邻接表+dfs】
- hrbust 哈理工oj 1360 Leyni的国家III【多路径并查集】
- 哈理工 oj 1161 Leyni
- 南阳理工 oj 图的邻接表dfs dfs 均可
- hrbust 哈理工oj 2179 组合【基础dfs过】
- hrbust 哈理工oj 1743 Word Search【DFS过】
- hrbust 2115,哈理工oj 2115 Equal【dfs+剪枝】
- hrbust/哈理工oj 2110 Keys【dfs+巧妙的二维判重】
- hrbust 1359 Leyni的国家II【树状dp】
- Hrbust oj/哈理工 oj 1216数的划分
- 哈理工oj/hrbust 2122 旅行【dij+优先队列优化+邻接表+map】
- 哈理工OJ 1161 Leyni(线段树)
- 哈理工oj hrbust 2267 从前的运算符【思维】
- hrbust 1216/哈理工oj 1216 数的划分【dp】
- hrbust 1625 哈理工oj ikki的数字【树状数组】
- hrbust/哈理工oj 1475国王的宴会【树型dp】
- hrbust 哈理工oj 1588 神医【贪心】
- 后缀树的生成以及一些运用
- 蓝桥杯 历届试题 幸运数
- Ubuntu 14.04 FTP服务器--vsftpd的安装和配置
- HDU 1166敌兵布阵 (线段树)
- C_aop面向切面编程_s
- hrbust 1326 哈理工oj 1326 Leyni的国家【DFS+邻接表建图】
- 哈夫曼算法解压最终版(解压成功)
- 2016几点想法
- 初始化Servlet时配置Log4j
- 使用dom4j读写xml实例
- win10下apache不能正常启动的解决方案之一
- C++实验报告3
- kd树简介 在matlab下VLFeat中的kd-tree使用
- HDOJ 1254 推箱子【bfs && dfs】