2019牛客多校訓練(四)

2022-05-01 01:36:16 字數 1466 閱讀 8024

給出一顆樹

讓所有染色點到某個點的最大距離最小

結果為最遠點對的距離除二向上取整

假設有最遠點對的路徑上的中間點

如果有某個點它到這個中間點要遠,那麼最遠點對就不是最遠點對了,產生矛盾

利用樹上點對路徑唯一性,兩次$dfs$求出染色點直徑

#include#define ll long long

#define pa pairusing namespace std;

const int maxn=1e5+10;

const ll mod=1e9+7;

struct edgeedge[maxn*2];

int n,k,edge_num,head[maxn],dis[maxn],cor[maxn];

void add_edge(int u,int v)

void dfs(int x)

}int fin(int x)

\%3$等於1或者2

1.如果$a\%3=0$,直接輸出$a$

2.如果$a\%3=1$,去掉二進位制某些位置,讓$a$變成3的倍數即可

3.$a\%3=1$同理

#include#define ll long long

#define pa pairusing namespace std;

const int maxn=3e6+10;

const ll mod=1e9+7;

vectorve1,ve2;

int main()

else if(ve1.size()==1)else if(ve1.size()==0)

}else else if(ve2.size()==1)else if(ve2.size()==0)}}

return 0;

} triples i

給出乙個圖,最多讓$k$條邊花費變成0,求$s$到$t$的最短距離

對整個圖分層,分成$k+1$層,第0層節點編號是$1$到$n$,第二次是$n+1$到$n+n$

建立層之間的邊,並且允許第i層的點用0花費到達$i+1$層

呼叫迪傑斯特拉,最後的結果是$dis[k*n+t]$

#include#define ll long long

#define pa pairusing namespace std;

const int maxn=2e6+10;

const ll mod=1e9+7;

int n,m,s,t,k,head[maxn],edge_num,dis[maxn];

bool vis[maxn];

struct edgeedge[maxn*5];

void add_edge(int u,int v,int w)}}

}int main()}}

dj();

printf("%d\n",dis[k*n+t]);

return 0;

}

2019牛客多校訓練(五)

求出類似斐波那契數列的第 n 項 n leq 10 我想著尤拉降冪。其實尤拉降冪並不適用於矩陣的運算 隊友看了題之後立馬想到十進位制的矩陣快速冪,太強了 和普通的矩陣不同的是,這個每次乘十前進,但這不是問題 對矩陣快速冪的時間複雜度認識得不深,潛意識以為 n 是乙個無窮大的數 include def...

2019牛客暑期多校訓練1

equivalent prefixes 這個是乙個用單調棧的題目,至於為什麼可以用單調棧?把兩個陣列同時跑單調棧,如果每次進棧最多乙個,當然在這個進棧之前肯定會有數出棧,如果存在乙個數進棧了,然後這個時候判斷一下進棧的這個數的位置是不是相同,如果不相同就說明肯定是不對的。為什麼說這個時候只要考慮這個...

牛客網多校訓練 訓練技巧

常州大學組織了新生寒假訓練一共n天,每天訓練可以獲得的訓練效果是ei。但是如果連續訓練超過k天,萌新們會受不了而被勸退。現在負責人想知道,如何安排能保證萌新不會被勸退並且能獲得最大的訓練效果。第一行 兩個用空格隔開的整數 n和k,1 n 100000,1 k n 第二行到n 1行 第i 1行有乙個整...