2019牛客多校第四場A meeting 思維

2022-08-10 04:00:10 字數 788 閱讀 7276

乙個樹上有若干點上有人,找出乙個集合點,使得所有人都到達這個點的時間最短(無碰撞)

就是找樹的直徑,找直徑的時候記得要找有人的點

#include#include#includeusing namespace std;

#define pb push_back

#define f first

#define s second

#define mkp make_pair

const int maxn=1e5+5;

typedef long long ll;

const int inf=1e10;

int n,k,id,x,y,vis[maxn],head[maxn];

struct nodeedge[maxn*4];

int cnt=0;

void add(int x,int y)

int a[maxn];

int now=0;

void dfs(int x,int fa,int dep)

for(int i=head[x];i!=-1;i=edge[i].next)

}int main()

for(int i=1;i<=k;i++)

scanf("%d",&a[i]),vis[a[i]]=1;

dfs(1,0,0);

now=0;

dfs(id,0,0);

printf("%d\n",(now+1)/2);

return 0;

}

2019牛客多校第四場 D triples I

對於二進位制每一位上的1進行考慮,2 0 3 1 2 1 3 2 2 2 3 1 2 3 3 2 那麼我們可以想到把a轉化為二進位制,然後他 3 1的位數有cnt1個,3 2的位數有cnt2個。我們可以想到每個數字最多由2個數字組成,下面給出證明。那麼 sum a 3,如果sum 0,那麼直接乙個數...

2019牛客多校第四場 A meeting

考場上寫了一大坨樹形dp,寫的時候就感覺我這不是跟求樹的最長鏈寫的一毛一樣 然後考後看題解,果然是k個ren所連成的子樹的最長鏈的一半 可以利用反證法證明,如果在長度為d的最長鏈的中間放乙個中心,如果有另外乙個點到這個點的長度 d 1 2,那麼這個點到對面的那個點的長度大於d,所以不存在這樣乙個點。...

2019牛客多校第四場A K

a.給你一張n個點n 1條邊的圖,和k個關鍵點。求乙個點到所有關鍵點距離最大值的最小為多少。乍一看像是對答案二分,但是考慮兩個相距最遠的關鍵點,假設他們的距離為d,那麼答案肯定為 d 1 2 如果有一點到中心點的距離超過了 d 1 2 那麼這個點會成為最遠關鍵點對中的乙個。矛盾。所以題目就變成了如何...