题目链接:https://www.nowcoder.com/acm/contest/94/B

题意:在一棵有 n 个节点的树上,有两种操作,一个是把 u 到 v 的路径走一遍,另一个是查询 u 到 fa[ u ]的路径走了几次,如果没走过输出“ Not yet ”,走过一次升序输出经过要走这条路时的路径端点,否则输出“ Many Times”。

题解:因为只需记录每条路径经过一次,若一条路径经过了多次,则访问该节点时可跳到它的没有访问过路径的祖先上面,故可以使用并查集来实现。

 #include <bits/stdc++.h>
using namespace std;
#define ll long long
#define mst(a,b) memset((a),(b),sizeof(a))
#define pi acos(-1)
#define pii pair<int,int>
const int INF = 0x3f3f3f3f;
const double eps = 1e-;
const int MAXN = 1e5 + ;
const int MAXM = 2e6 + ;
const ll mod = 1e9 + ; int n;
int num[MAXN],fa[MAXN],pre[MAXN],dep[MAXN];
int ansl[MAXN],ansr[MAXN]; int findd(int x) {
if(pre[x] == x) return x;
return pre[x] = findd(pre[x]);
} void update(int u,int v) {
int a = u, b = v;
while(u != v) {
if(dep[u] < dep[v]) swap(u,v);
num[u]++;
if(num[u] == )
ansl[u] = min(a,b),ansr[u] = max(a,b);
else
pre[u] = fa[u];
u = findd(fa[u]);
}
} int main()
{
#ifdef local
freopen("data.txt","r",stdin);
// freopen("data.txt","w",stdout);
#endif
while(~scanf("%d",&n)) {
mst(num,);
for(int i=; i<n; i++) {
int x;
scanf("%d",&x);
fa[i] = x;
pre[i] = i;
dep[i] = dep[x] + ;
}
int q;
scanf("%d",&q);
while(q--) {
char s[];
scanf("%s",s);
if(s[] == 'R') {
int u,v;
scanf("%d%d",&u,&v);
update(u,v);
}
else {
int u;
scanf("%d",&u);
if(num[u] == ) puts("Not yet");
else if(num[u] == ) printf("%d %d\n",ansl[u],ansr[u]);
else puts("Many times");
}
}
}
return ;
}

最新文章

  1. web.xml 配置中classpath: 与classpath*:的区别
  2. java程序实现删除本地文件
  3. jquery.cookie.js 用法
  4. javaWeb学习之运用myeclipse结合tomcat开发一些简单的jsp和service
  5. spring利用注解来注册bean到容器
  6. 肾果手机App Store切换区域(无需Visa或者万事达)
  7. memcache锁,解决查询过多email查询为空的问题
  8. Android再学习-便签开发小结-20141119
  9. Sigmoid function in NN
  10. vba考勤处理
  11. 如何禁止使用teamviwer的使用
  12. Codeforces Round #243 (Div. 2) Problem B - Sereja and Mirroring 解读
  13. iOS获取WIFI的IP、子网掩码,以及域名转IP
  14. SQLAlchemy基础操作二
  15. 洛谷 P2622 关灯问题II【状压DP;隐式图搜索】
  16. vs 删除行尾空格
  17. FFPLAY的原理
  18. Triangle (第8届山东省赛的某题)
  19. psutil的几个例子
  20. pip 解决下载包速度慢的问题

热门文章

  1. 一个基于Unix套接字的注册登录系统
  2. The Maze II
  3. DB2 数据库权限
  4. js轮播图和bootstrap中的轮播图
  5. 使用window.open 实现弹框和居中对齐
  6. 剑指offer37:统计一个数字在排序数组中出现的次数
  7. MyBatis 源码篇-插件模块
  8. .Net C# RSA签名和验签
  9. IP 、127.0.0.1、localhost 三者区别
  10. Servlet获取JSP中的汉字乱码问题解决方案