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示例2yes
複製
4 3複製add 1
query 4
del 1
query 4
yes示例3no
複製
6 3複製add 10
query 10
add 5
query 5
del 7 //系統將指紋10和指紋5全部刪除
query 8
yesyesno
對於100%的測試資料:ps:主要考set的用法1 ≤ k,m ≤ 1000000
資料量較大,注意使用更快的輸入輸出方式。
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想和與小鯤比賽游泳,我們可以把游泳池看成乙個圓環,兩人從起點遊一...