UESTC 32 树上战争(Battle on the tree)
这题其实很简单,每个人肯定都往上走,才能保证尽快赢,所以无非是看谁离根节点近,即深度小。。用并查集中的findset思想,不断找父节点一直到根节点来找深度就可以了。
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; #define N 100007 int fa[N],n,cnt; void init() { for(int i=1;i<=n;i++) fa[i] = i; } void findset(int x) { if(x != fa[x]) { findset(fa[x]); cnt++; } } int main() { int m,a,b,x,y,i; while(scanf("%d%d",&n,&m)!=EOF && (n||m)) { init(); for(i=0;i<n-1;i++) { scanf("%d%d",&a,&b); fa[b] = a; } while(m--) { scanf("%d%d",&x,&y); cnt = 0; findset(x); int kx = cnt; cnt = 0; findset(y); int ky = cnt; if(kx <= ky) puts("lxh"); else puts("pfz"); } } return 0; }
作者:whatbeg
出处1:http://whatbeg.com/
出处2:http://www.cnblogs.com/whatbeg/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
更多精彩文章抢先看?详见我的独立博客: whatbeg.com


浙公网安备 33010602011771号