트 리 전쟁 (HDU 2545 및 루트 노드 길이 까지 집합)

4236 단어
나무 위의 전쟁
Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 799    Accepted Submission(s): 436
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
 
 1 #include <iostream>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <cstdio>
 5 #define Max 100000+10
 6 using namespace std;
 7 int n,m;
 8 int Rank[Max];
 9 int per[Max];
10 void init()
11 {
12     for(int i=1;i<=n;i++)
13     {
14         per[i]=i;
15         Rank[i]=1;
16     }    
17     return;
18 }
19 void unite(int a,int b)
20 {
21     per[b]=a;
22     Rank[b]=Rank[a]+1;
23     return;
24 }
25 int main()
26 {
27     int i,j;
28     int a,b;
29     //freopen("in.txt","r",stdin);
30     while(scanf("%d%d",&n,&m)!=EOF)
31     {
32         init();
33         if(n==0&&m==0)
34             break;
35         for(i=0;i<n-1;i++)
36         {
37             scanf("%d%d",&a,&b);
38             unite(a,b);
39         }
40         for(i=0;i<m;i++)
41         {
42             scanf("%d%d",&a,&b);
43             if(Rank[a]<=Rank[b])
44                 printf("lxh
"); 45 else 46 printf("pfz
"); 47 } 48 } 49 return 0; 50 }

좋은 웹페이지 즐겨찾기