i題修改題解:比較巧妙的轉換成圖論的好題,思路感覺不太好像,不過感覺是個經典題(霧) 。
因為初始的序列是隨機,不妨假設序列的每一位的數都不一樣,即最複雜的情況。
然後我們考慮這個操作的意義,第i次操作其實就是把
我們可以建乙個虛點a[n+1]=0。
這樣操作就變成了在
這樣最終的答案不就是求我們建的圖的最小生成樹的權值和。。
**:
d題#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;
}
題解:這個題的資料有點弱,不知道為啥有的明顯錯誤的方法都給過了。。。。。
正解除了題解中給出的二分(其實是不理解)做法,另乙個做法也是很好理解的。
我們推導樣例不難發現,最多只能獲得深度小於等於操作次數的點的子樹節點的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 帝國的後備資源...