b:進行根、右、左的樹遍歷。然後求最長上公升子串行長度。
#include#include#include#include#include#include#includeusing namespace std;
#define ll long long
const int maxn = 2e5+22;
int to[maxn][2];
vectorx;
int val[maxn];
void dfs(int u)
int d[maxn];
int main()
else
} printf("%d\n",len);
}
c:
對於每一場流星雨單獨求貢獻。
為 前一場出現流星雨的概率*(pi+p)+前一場不出現流星雨的概率*pi.
快速冪寫錯,**。
#include#include#include#include#include#include#includeusing namespace std;
#define ll long long
const int maxn = 2e5+22;
const ll mod = 1e9+7;
ll qkm(ll base,ll mi)
return ans;
}ll x[maxn],y[maxn],w[maxn],p[maxn],up[maxn];
int main()
ll p=a*qkm(b,mod-2)%mod;
ll ans=0;
ans+=p[1]*w[1]%mod;
ans%=mod;
ll pre=p[1];
for(int i=2;i<=n;++i)
printf("%lld\n",ans);
}
d:
開bitset儲存這個聯通塊和哪幾個異色點連了線。
在同色加邊為並查集合並操作。合併操作更新biset。
操作3則為&操作,然後count。
並查集寫錯。**
#include#include#include#include#include#include#includeusing namespace std;
#define ll long long
const int maxn = 2e5+22;
const ll mod = 1e9+7;
bitset<50022> bt[50013];
int cor[50013];
int fa[50013];
int findi(int x)
void add(int x,int y)
int wt,bk;
int main()
int x,y;
for(int i=1;i<=m;++i)
}else
}else if(op==2)else
printf("%d\n",wt);
}elseelse
} }}
(dfs LIS)牛客練習賽39 選點
時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld 有一棵n個節點的二叉樹,1為根節點,每個節點有乙個值wi。現在要選出盡量多的點。對於任意一棵子樹,都要滿足 如果選了根節點的話,在這棵子樹內選的其他的點都要比根節點...
牛客練習賽39D
首先操作2用並查集就行了。題解說的好啊!考慮操作一,連的兩個點如果同色,直接合併,然後這個顏色的聯通塊 1,然後合併bitset,就是或一下。bitset維護的是相連的異色結點。如果兩個點異色,那麼我們就不管他們,直接在兩個bitset裡分別把對方設為1。對於操作三 直接 b x b y count...
(概率dp)牛客練習賽39 C
現在一共有n天,第i天如果有流星雨的話,會有wi顆流星雨。第i天有流星雨的概率是pi。如果第一天有流星雨了,那麼第二天有流星雨的可能性是p2 p,否則是p2。相應的,如果第i 1 i 2 天有流星雨,第i天有流星雨的可能是pi p,否則是pi。求n天後,流星雨顆數的期望。因為當天的概率只與前一天的概...