牛客小白月賽6

2021-08-25 11:18:47 字數 4408 閱讀 4365

c(挑花)(dfs或bfs)

桃花一簇開無主,可愛深紅映淺紅。

——《題百葉桃花》

桃花長在桃樹上,樹的每個節點有乙個桃花,調皮的htbest想摘盡可能多的桃花。htbest有乙個魔法棒,摘到樹上任意一條鏈上的所有桃花,由於htbest法力有限,只能使用一次魔法棒,請求出htbest最多可以摘到多少個桃花。

第一行有乙個正整數n,表示桃樹的節點個數。

接下來n-1行,第i行兩個正整數ai,bi ,表示桃樹上的節點ai,bi之間有一條邊。

第一行乙個整數,表示htbest使用一次魔法棒最多可以摘到多少桃花。
示例1

複製

3

1 22 3

複製

3
示例2

複製

3

1 21 3

複製

3
示例3

複製

4

1 22 3

3 4

複製

4
對於100%的測試資料:

1 ≤ n ≤ 1000000

資料量較大,注意使用更快的輸入輸出方式。

ps:題意就是求樹的最長直徑。題解:假如你的樹上最長的路徑的左右端點是。a,b。那麼你從任意一點u出發搜到的最遠的點一定是a、b中的一點,然後在從這個最遠點開始搜,就可以搜到直徑的另乙個端點,所以要用兩遍bfs或dfs。

bfs ac**:

#include #include#include#include#include#include#include#include#include#includeconst int maxn=1e6+10;

const int mod=1e9+7;

const int inf=1e8;

#define me(a,b) memset(a,b,sizeof(a))

typedef long long ll;

using namespace std;

int head[maxn],cnt=1,n,dist[maxn],ans;

bool vis[maxn];

struct node

mp[maxn<<1];

void add(int u,int v)

void bfs(int x)

}}int main()

mp[maxn<<1];

void add(int u,int v)

void dfs(int x)

}}int main()

ll quick_pow(ll a,ll b)

return res;

}void build(int l,int r,int rt)

int m=(l+r)>>1;

build(l,m,rt<<1);

build(m+1,r,rt<<1|1);

updata(rt);

}void pushdata(int c,int flog,int x,int l,int r,int rt)

int m=(l+r)>>1;

if(c<=m)

pushdata(c,flog,x,l,m,rt<<1);

else

pushdata(c,flog,x,m+1,r,rt<<1|1);

updata(rt);

}int getma(int l,int r,int l,int r,int rt)

int main()

return 0;

}

g 指紋鎖(stl)

ha實驗有一套非常嚴密的安全保障體系,在ha實驗基地的大門,有乙個指紋鎖。

該指紋鎖的加密演算法會把乙個指紋轉化為乙個不超過1e7的數字,兩個指紋數值之差越小,就說明兩個指紋越相似,當兩個指紋的數值差≤k時,這兩個指紋的持有者會被系統判定為同乙個人。

現在有3種操作,共m個,

操作1:add x,表示為指紋鎖錄入乙個指紋,該指紋對應的數字為x,如果系統內有乙個與x相差≤k的指紋,則系統會忽略這次新增操作

操作2:del x,表示刪除指紋鎖中的指紋x,若指紋鎖中多個與x相差≤k的指紋,則全部刪除,若指紋鎖中沒有指紋x,則可以忽略該操作,

操作3:query x,表示有乙個持有指紋x的人試圖開啟指紋鎖,你需要設計乙個判斷程式,返回該人是否可以開啟指紋鎖(只要x與存入的任何乙個指紋相差≤k即可開啟鎖)。

初始狀態,指紋鎖中沒有任何指紋。

第一行有2個正整數m,k。

接下來m行,每行描述一種操作:add x,del x或query x。

對於每個query操作,輸出一行,包含乙個單詞「yes」或「no」,表示該人是否可以開啟指紋鎖。

示例1複製

4 3

add 1

add 10

query 5

query 4

複製

no

yes

示例2

複製

4 3

add 1

query 4

del 1

query 4

複製

yes

no

示例3

複製

6 3

add 10

query 10

add 5

query 5

del 7 //系統將指紋10和指紋5全部刪除

query 8

複製

yes

yesno

對於100%的測試資料:

1 ≤ k,m ≤ 1000000

資料量較大,注意使用更快的輸入輸出方式。

ps:主要考set的用法

ac**:

#include #include#include#include#include#include#include#include#include#includeconst int maxn=1e2+10;

const int mod=1e9+7;

const int inf=1e8;

#define me(a,b) memset(a,b,sizeof(a))

typedef long long ll;

using namespace std;

int main()

}else if(s[0]=='q')

}return 0;

}

h 挖溝(最小生成樹)

胡隊長帶領ha實驗的戰士們玩真人cs,真人cs的地圖由一些據點組成,現在胡隊長已經占領了n個據點,為了方便,將他們編號為1-n,為了隱蔽,胡隊長命令戰士們在每個據點出挖乙個坑,讓戰士們躲在坑里。由於需要在任意兩個點之間傳遞資訊,兩個坑之間必須挖出至少一條通路,而挖溝是一件很麻煩的差事,所以胡隊長希望挖出數量盡可能少的溝,使得任意兩個據點之間有至少一條通路,順便,盡可能的∑d[i][j]使最小(其中d[i][j]為據點i到j的距離)。

第一行有2個正整數n,m,m表示可供挖的溝數。

接下來m行,每行3個數a,b,v,每行描述一條可供挖的溝,該溝可以使a與b連通,長度為v。

輸出一行,乙個正整數,表示要使得任意兩個據點之間有一條通路,至少需要挖長的溝。(資料保證有解)
示例1

複製

2 2

1 2 1

1 2 3

複製

1
示例2

複製

3 3

1 2 3

2 3 4

1 3 5

複製

7
對於100%的測試資料:

1 ≤ n ≤ 100000

1 ≤ m ≤ 500000

1 ≤ v ≤ 10000

ac**:

#include #include#include#include#include#include#include#include#include#includeconst int maxn=5e5+10;

const int mod=1e9+7;

const int inf=1e8+10;

#define me(a,b) memset(a,b,sizeof(a))

typedef long long ll;

using namespace std;

int n,m,root[maxn];

struct node

牛客小白月賽6 桃花

時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 桃花一簇開無主,可愛深紅映淺紅。題百葉桃花 桃花長在桃樹上,樹的每個節點有乙個桃花,調皮的htbest想摘盡可能多的桃花。htbest有乙個魔法棒,摘到樹上任意一條...

20180818牛客小白月賽6 A

北冥有魚,其名為鯤,鯤之大,不知其幾千里也。莊子 逍遙遊 htbest有一條可愛的小鯤,htbest想和與小鯤比賽游泳,我們可以把游泳池看成乙個圓環,兩人從起點遊一圈回到起點即可完成比賽。兩人在距離小於k時 距離指的是在環上的距離,而非直線距離 他們會互相監督對方有沒有全速向前遊,如果發現有一方沒有...

牛客小白月賽6 A鯤

時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 北冥有魚,其名為鯤,鯤之大,不知其幾千里也。莊子 逍遙遊 htbest有一條可愛的小鯤,htbest想和與小鯤比賽游泳,我們可以把游泳池看成乙個圓環,兩人從起點遊一...