hdu 2545 树上战争(加权并查集)
2014-11-13 17:10
411 查看
题意:给出一颗树,每次询问树上两个节点到根的距离谁更近。。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <string> #include <vector> #include <queue> using namespace std; #define REP(i,s,t) for(int (i)=(s);(i)<=(t);++(i)) #define UREP(i,s,t) for(int (i)=(s);(i)>=(t);--(i)) #define INF 0x7FFFFFFF const int maxn = 100000+5; int d[maxn], pa[maxn]; int n, m; int Find(int x) { if (x == pa[x]) return x; int t = pa[x]; pa[x] = Find(pa[x]); d[x] += d[t]; return pa[x]; } int main() { //freopen("input.in", "r", stdin); while (scanf("%d%d",&n, &m) && (n|m)) { int a, b; memset(d, 0, sizeof(d)); for (int i=1;i<=n;++i) pa[i] = i; for (int i=0;i<n-1;++i) { scanf("%d%d",&a, &b); pa[b] = a; d[b] = 1; } for (int i=1;i<=n;++i) Find(i); //for (int i=1;i<=n;++i) printf("%d ", d[i]);putchar('\n'); for (int i=0;i<m;++i) { scanf("%d%d",&a, &b); if (d[a]-1 < d[b]) printf("lxh\n"); else printf("pfz\n"); } } return 0; }
相关文章推荐
- hdu 2545 树上战争(并查集)
- hdu 2545 树上战争(并查集)
- 树上战争_hdu_2545(并查集).cpp
- hdu 2545 树上战争(并查集???)
- hdu 2545 树上战争(并查集)
- 树上战争(HDU 2545 并查集求解点到根节点长度)
- hdu 2545 树上战争(并查集)
- 树上战争 HDU-2545 【并查集】
- HDU 2545 树上战争 (并查集)
- hdu 2545 树上战争(并查集)
- HDU 2545 树上战争(并查集)
- HDU 2545 树上战争(并查集)
- HDU - 2545 树上战争(没有路径压缩的并查集)
- hdu 2545 树上战争 并查集
- HDU 2545 树上战争(并查集)
- HDU 2545 树上战争(求树的高度)
- 杭电 2545 树上战争(并查集过)
- hdu 2545 树上战争
- HDU 2545 树上战争
- HDU 2545 树上战争 (并查集+YY)