A1486 樹(王康寧)

2022-05-11 21:39:26 字數 2394 閱讀 8033

題目:

題解:其實看到和路徑有關的就應該想到點分治。

我們找出重心之後遍歷每一棵子樹得到它的

然後我們按x排序,維護兩個頭尾指標不斷把滿足條件的加入trie,然後把左邊的放進trie裡查詢。

但是還有乙個問題,所取的兩個點不能位於同一棵子樹!!!

我yy了乙個做法。我們在用三元組來記錄

然後往trie裡插的時候,每條邊保留兩個ch表示有哪個子樹的點從trie往下經過了這裡。必須保證這兩個ch不同。

然後查詢的時候就判斷就行了。注意任何時刻往下走的時候都要判斷可行性,否則直接返回-1.

**:

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include

10 #include11 #include

12#define inf 1000000000

13#define maxn 250000+5

14#define maxm 8000000+5

15#define eps 1e-10

16#define ll long long

17#define ull unsigned long long

18#define pa pair19

#define for0(i,n) for(int i=0;i<=(n);i++)

20#define for1(i,n) for(int i=1;i<=(n);i++)

21#define for2(i,x,y) for(int i=(x);i<=(y);i++)

22#define for3(i,x,y) for(int i=(x);i>=(y);i--)

23#define for4(i,x) for(int i=head[x],y=e[i].go;i;i=e[i].next,y=e[i].go)

24#define for5(n,m) for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)

25#define mod 1000000007

26#define lch k<<1,l,mid

27#define rch k<<1|1,mid+1,r

28#define sqr(x) (x)*(x)

29using

namespace

std;

30 inline int

read()

3134

while(ch>='

0'&&ch<='9')

35return x*f;36}

37int n,m,k,cnt,tot,head[maxn],v[maxn],w[maxn],t[maxm][2][3],s[maxn],f[maxn],sum,rt,ans=-1;38

bool

del[maxn];

39struct edgee[2*maxn];

40struct reca[maxn];

41 inline bool cmp(rec a,rec b)

42 inline void add(int x,int

y)43

;head[x]=tot;

45 e[++tot]=(edge);head[y]=tot;46}

47 inline void insert(int y,int

ch)4857}

58 inline int query(int y,int

ch)5971}

72return

ret;

73}

74 inline void getdep(int x,int fa,int w1,int w2,int

w3)75

;77 for4(i,x)if(!del[y]&&y!=fa)getdep(y,x,w1+v[y],w2^w[y],w3);78}

79 inline void getrt(int x,int

fa)80

88 f[x]=max(f[x],sum-s[x]);

89if(f[x]x;90}

91 inline void work(int

x)92

102 for1(i,cnt)if(a[i].x>=k)ans=max(ans,a[i].y);

103 for0(i,tot)t[i][0][0]=t[i][0][1]=t[i][0][2]=t[i][1][0]=t[i][1][1]=t[i][1][2]=0

;104 tot=0

;105 for4(i,x)if(!del[y])

106111

}

112int

main()

113

view code

Tsinsen A1486 樹 樹分治 字典樹

傳送門 tsinsen a1486.樹 題意 給你一棵樹 n 1e5 每個點有乙個權值和喜歡不喜歡之分,找出一條路徑至少包含k個喜歡的點,而且異或和最大 思路 樹分治,同時維護字典樹 字典樹每個點維護乙個喜歡的點數的最大值 時間複雜度 nlogn 30 include using namespace...

1486 陣列異或操作

題目描述 給你兩個整數,n 和 start 陣列 nums 定義為 nums i start 2 i 下標從 0 開始 且 n nums.length 請返回 nums 中所有元素按位異或 xor 後得到的結果。示例 1 輸入 n 5,start 0 輸出 8 解釋 陣列 nums 為 0,2,4,...

1486 陣列異或操作

給你兩個整數,n 和 start 陣列 nums 定義為 nums i start 2 i 下標從 0 開始 且 n nums.length 請返回 nums 中所有元素按位異或 xor 後得到的結果。示例 1 輸入 n 5,start 0 輸出 8 解釋 陣列 nums 為 0,2,4,6,8 其...