題目:
給一棵樹,如果樹上的某個節點被某個人佔據,則它的所有兒子都被佔據,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 1sample output1 21 2
5 21 2
1 33 4
3 54 2
4 50 0
lxh思路:pfzlxh
本題輸入、輸出都很多,請使用scanf和printf代替cin、cout。
記錄一下每個節點的父節點,之後再通過遞迴呼叫求得每個節點到根節點的距離
如果lxh所在節點到根節點距離小於等於pfz所在節點到根節點距離,則輸出lxh
否則輸出pfz
**:
#include#include#include#include#include#include#include#include#include#include#define ll long long
#define n 1008611
#define inf 0x3f3f3f3f
using namespace std;
int f[100861],s[100861];
int dfs(int x)
int main()
for(int i=1;i<=n;i++)
s[i]=dfs(i);
for(int i=0;i}
return 0;
}
樹上戰爭(HDU 2545)
給一棵樹,如果樹上的某個節點被某個人佔據,則它的所有兒子都被佔據,lxh和pfz初始時分別站在兩個節點上,誰當前所在的點被另乙個人佔據,他就輸了比賽,問誰能獲勝 input 輸入包含多組資料 每組第一行包含兩個數n,m n,m 100000 n表示樹的節點數,m表示詢問數,n m 0表示輸入結束。節...
I 樹上戰爭 HDU 2545
給一棵樹,如果樹上的某個節點被某個人佔據,則它的所有兒子都被佔據,lxh和pfz初始時分別站在兩個節點上,誰當前所在的點被另乙個人佔據,他就輸了比賽,問誰能獲勝 input輸入包含多組資料 每組第一行包含兩個數n,m n,m 100000 n表示樹的節點數,m表示詢問數,n m 0表示輸入結束。節點...
hdu2545 樹上戰爭 並查集
problem description 給一棵樹,如果樹上的某個節點被某個人佔據,則它的所有兒子都被佔據,lxh和pfz初始時分別站在兩個節點上,誰當前所在的點被另乙個人佔據,他就輸了比賽,問誰能獲勝 input 輸入包含多組資料 每組第一行包含兩個數n,m n,m 100000 n表示樹的節點數,...