hdu2545树上战争

news/2024/11/16 9:32:10/

树上战争
Time Limit : 10000/4000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 4 Accepted Submission(s) : 4
Problem Description
给一棵树,如果树上的某个节点被某个人占据,则它的所有儿子都被占据,lxh和pfz初始时分别站在两个节点上,谁当前所在的点被另一个人占据,他就输了比赛,问谁能获胜

Input
输入包含多组数据每组第一行包含两个数N,M(N,M<=100000),N表示树的节点数,M表示询问数,N=M=0表示输入结束。节点的编号为1到N。接下来N-1行,每行2个整数A,B(1<=A,B<=N),表示编号为A的节点是编号为B的节点的父亲接下来M行,每行有2个数,表示lxh和pfz的初始位置的编号X,Y(1<=X,Y<=N,X!=Y),lxh总是先移动

Output
对于每次询问,输出一行,输出获胜者的名字

Sample Input
2 1
1 2
1 2
5 2
1 2
1 3
3 4
3 5
4 2
4 5
0 0

Sample Output
lxh
pfz
lxh

提示:
本题输入、输出都很多,请使用scanf和printf代替cin、cout。

题意:给一棵树的所有父节点和子节点,如果一个点是另一个点的子节点,那么他属于这个节点,也就是输了,然后一对初始位置,问假如第一个先走,谁会赢?
我们通过父节点知道,每次输入一对节点,前一个节点是后一个节点的父节点,那么直接加入该节点的集合即可,不多说,直接并查集

#include <cstring>
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
#define N 100010
int map[N],rank_[N];
int n,m;
int ans;
void init(int n)
{for(int i=1;i<=n;i++){map[i]=i;}
}
int find(int x)
{int num=0;while(x!=map[x]){x=map[x];num++;}return num;
}
void Union(int x,int y)
{int a=find(x);int b=find(y);if(a==b)return;if(rank_[x]>rank_[y])map[y]=x;else{if(rank_[x]==rank_[y])rank_[y]++;map[x]=y;}
}
int main()
{int x,y;while(scanf("%d%d",&n,&m)!=EOF&&n+m){init(n);for(int i=1;i<=n-1;i++){scanf("%d%d",&x,&y);map[y]=x;}int anw1,anw2;for(int i=1;i<=m;i++){scanf("%d%d",&anw1,&anw2);if(find(anw1)<=find(anw2))printf("lxh\n");elseprintf("pfz\n");}}
}

http://www.ppmy.cn/news/303968.html

相关文章

ZOJ-2545

也比较简单&#xff0c;转化为对数计算就行了 #include<stdio.h> #include<math.h>int main() {int i, a[23], n 1;double sum 0, log2 log(2);for (i 2; i < 22; i){int max 1 << i;while (sum / log2 < max)sum log(n);a[i] n - 2;}while (sc…

2545 ACM 博客 比较树的路径长短

题目&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2545 题意&#xff1a;比较树的路径长短 思路&#xff1a;利用数组存入父节点的值&#xff0c; 例如&#xff1a; 5 2 1 2 1 3 3 4 3 5 4 2 查找 4 进行了 3 4和1 3 两步&#xff0c;如何判断到达了根节点…

POJ 2545

还是一样的题&#xff0c;&#xff0c;&#xff0c;不解释。不过数据真的太弱了&#xff0c;竟然可以0ms过&#xff0c;&#xff0c;&#xff0c;&#xff0c;看来今天真的很水。。。。。。题目&#xff1a; Hamming Problem Time Limit: 1000MS Memory Limit: 65536KTotal Sub…

POJ 2545 Hamming Problem 笔记

3个素数p1、p2、p3。汉明序列中的元素都是由这3个素数相乘得来&#xff0c;并按增序排列。求汉明序列的第 i 个元素。

hdu-2545

并查集的扩展应用&#xff0c;求节点到根的距离 //求节点到根的距离 //r[i]存储节点 i 到根的距离#include <stdio.h> #include <iostream> #include <string.h> #include <algorithm> #include <stdlib.h>using namespace std;int p[100010]; i…

hdu2545

/* 分析&#xff1a; 简单并查集。 在网吧夜市刷题&#xff0c;桑不起呀&#xff0c;囧囧囧~~~ 2012-11-19 */ #include"stdio.h" #include"string.h" #define N 100011 int n,m; int pre[N]; int dis[N]; void build() {int i;for(i1;i<n;i) {pre[i]i;…

SSL_2545 奇数

题意 求出a~b中奇数的个数并输出。 思路 可以直接枚举a~b然后判断输出&#xff0c;我这里用的是别的方法。 代码 #include<cstdio> int a,b,s,as; int main() {scanf("%d%d",&a,&b);if (a%20) a;if (b%20) b--;if (a!b) printf("%d\n",…

LeetCode 2545. 根据第 K 场考试的分数排序

班里有 m 位学生&#xff0c;共计划组织 n 场考试。给你一个下标从 0 开始、大小为 m x n 的整数矩阵 score &#xff0c;其中每一行对应一位学生&#xff0c;而 score[i][j] 表示第 i 位学生在第 j 场考试取得的分数。矩阵 score 包含的整数 互不相同 。 另给你一个整数 k 。…