牛客小白月賽29 DIJ題 解題報告

2021-10-10 16:43:58 字數 3544 閱讀 9274

i題修改

題解:比較巧妙的轉換成圖論的好題,思路感覺不太好像,不過感覺是個經典題(霧) 。

因為初始的序列是隨機,不妨假設序列的每一位的數都不一樣,即最複雜的情況。

然後我們考慮這個操作的意義,第i次操作其實就是把

我們可以建乙個虛點a[n+1]=0。

這樣操作就變成了在

這樣最終的答案不就是求我們建的圖的最小生成樹的權值和。。

**:

#include #define pi atan(1.0)*4

#define rp(i,s,t) for (int i = (s); i <= (t); i++)

#define rp(i,t,s) for (int i = (t); i >= (s); i--)

#define sc(x) scanf("%d",&x)

#define scl(x) scanf("%lld",&x)

#define ll long long

#define ull unsigned long long

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

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

#define pii pair#define pll pair#define pil pair#define m_p make_pair

#define p_b push_back

#define ins insert

#define era erase

#define debug puts("ac")

#define inf 0x3f3f3f3f

#define linf 0x3f3f3f3f3f3f3f3f

using namespace std;

inline int read()

while(ch>='0'&&ch<='9')

return s*f;

}const int n = 2e5+7;

struct edgee[n];

int fa[n];

int find(int x)

bool cmp(edge a,edge b)\right \rceil" class="mathcode" src=""/>這個數很有特點,我們用它乘以k不難發現》=2n的,即這k個人走過的點數和》=2n。

這時我們就需要知道乙個知識,乙個圖的尤拉序的點數和是滿足這個條件的(注意這裡說的是第二種尤拉序,如果不懂得話可以參考這篇文章)。

因此我們只需要求尤拉序,然後不斷的連續取

**:#include #define pi atan(1.0)*4

#define rp(i,s,t) for (int i = (s); i <= (t); i++)

#define rp(i,t,s) for (int i = (t); i >= (s); i--)

#define sc(x) scanf("%d",&x)

#define scl(x) scanf("%lld",&x)

#define ll long long

#define ull unsigned long long

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

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

#define pii pair#define pll pair#define pil pair#define m_p make_pair

#define p_b push_back

#define ins insert

#define era erase

#define debug puts("ac")

#define inf 0x3f3f3f3f

#define linf 0x3f3f3f3f3f3f3f3f

using namespace std;

inline int read()

while(ch>='0'&&ch<='9')

return s*f;

}const int n = 1e5+7;

vectorg[n];

int vis[n];

vectorans;

void dfs(int u)

}int main()

dfs(1);

puts("yes");

int num=(2*n+k-1)/k;

int len=ans.size();

int cur=0;

rp(i,1,k)

return 0;

}

d題

題解:這個題的資料有點弱,不知道為啥有的明顯錯誤的方法都給過了。。。。。

正解除了題解中給出的二分(其實是不理解)做法,另乙個做法也是很好理解的。

我們推導樣例不難發現,最多只能獲得深度小於等於操作次數的點的子樹節點的min能夠在符合條件的max操作裡傳到根節點。

因此答案就是所有深度小於等於操作次數的子樹節點的min值中的最大值。。

#include #define pi atan(1.0)*4

#define rp(i,s,t) for (register int i = (s); i <= (t); i++)

#define rp(i,t,s) for (register int i = (t); i >= (s); i--)

#define sc(x) scanf("%d",&x)

#define scl(x) scanf("%lld",&x)

#define ll long long

#define ull unsigned long long

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

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

#define pii pair#define pll pair#define pil pair#define m_p make_pair

#define p_b push_back

#define ins insert

#define era erase

#define debug puts("ac")

#define inf 0x3f3f3f3f

#define linf 0x3f3f3f3f3f3f3f3f

using namespace std;

inline int read()

while(ch>='0'&&ch<='9')

return s*f;

}#define m 200020

int n,m,dep[m],mn[m],val[m],ls[m],rs[m],ans=-inf;

inline void dfs(int x,int last=0)

int main()

項鍊 牛客小白月賽29

scimoon 意外得到了乙個項鍊,這個項鍊非常的神奇 它有 n 個珠子,一開始每個珠子有乙個編號,從左到右編號分別是 1 至 n,scimoon 進行了 m 次操作,每次操作有下面這麼幾種 1 x y 表示將編號為 x 的珠子移到編號為 y 的珠子的後面 2 x y 表示將編號為 x 的珠子移到編...

牛客小白月賽29(簽到 A E G H)

貪心,由於基地可以重複銷毀,所以找出找出每架戰機可轟炸基地的最大價值,排序之後貪心找一下即可 include include using namespace std const int n 1e6 15 struct nodeno n bool cmp node a,node b int a n i...

牛客小白月賽29 A 進攻

題目位址 一 題目內容 二 解題思路 scimoon 率領的反叛軍已經做好了準備 他的手下有 n 個戰機,每架戰機有乙個破壞力 ai 帝國有 m 個基地,每個基地有乙個防禦值 di,基地有乙個價值 vi 若乙個戰機的攻擊力嚴格大於基地的防禦值,則可以破壞該基地,得到這個基地的價值 v 帝國的後備資源...