日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

8.8 正睿暑期集训营 Day5

發布時間:2023/12/13 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 8.8 正睿暑期集训营 Day5 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 2018.8.8 正睿暑期集訓營 Day5
    • 總結
    • A 友誼巨輪(線段樹 動態開點)
    • B 璀璨光滑
    • C 構解巨樹
    • 考試代碼
      • A
      • B
      • C

2018.8.8 正睿暑期集訓營 Day5

時間:3.5h(實際)
期望得分:60+20+20
實際得分:20+20+20

比賽鏈接
這里也有一些

總結

線段樹!!!
[Update]好了現在我已經見什么都想寫線段樹了。

A 友誼巨輪(線段樹 動態開點)

題目鏈接

開n棵線段樹,維護最大值及答案,動態開點就完了啊。。

//4810ms 71524kb #include <cstdio> #include <cctype> #include <cstring> #include <algorithm> //#define gc() getchar() #define MAXIN 300000 #define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++) typedef long long LL; const int N=1e5+5;int n,K,m,root[N],Ans; char IN[MAXIN],*SS=IN,*TT=IN; struct Operation {int a,b,c; }opt[N];struct Segment_Tree {#define S N*50//每次最多4次Modify,但是有2次之前開過了,so N*17*2就夠。#define ls son[x][0]#define rs son[x][1]#define lson ls,l,m#define rson rs,m+1,rint tot,son[S][2];struct Node{LL mxv; int tm,ans;bool operator <(const Node &x)const{return mxv==x.mxv?tm<x.tm:mxv<x.mxv;}}t[S];#define Update(x) t[x]=std::max(t[ls],t[rs])void Modify(int &x,int l,int r,int p,LL v,int tm){if(!x) x=++tot, ls=rs=0, t[x]=(Node){0,0,0};//取max,tm也要清零啊 if(l==r) {t[x].mxv+=v, t[x].tm=std::max(t[x].tm,tm), t[x].ans=p; return;}int m=l+r>>1;if(p<=m) Modify(lson,p,v,tm);else Modify(rson,p,v,tm);Update(x);} }T;inline int read() {int now=0;register char c=gc();for(;!isdigit(c);c=gc());for(;isdigit(c);now=now*10+c-'0',c=gc());return now; } void Modify(int a,int b,int c,int tm) {int bef=T.t[root[a]].ans;T.Modify(root[a],1,n,b,c,tm);int now=T.t[root[a]].ans;if(bef==now) return;if(bef)if(T.t[root[bef]].ans==a) ++Ans;else --Ans;if(now)if(T.t[root[now]].ans==a) --Ans;else ++Ans; }int main() { // freopen("a.in","r",stdin); // freopen("my.out","w",stdout);T.t[0].tm=1000000;for(int Case=read(); Case--; ){memset(root,0,sizeof root);n=read(), K=read(), m=read(), T.tot=Ans=0;for(int i=1,a,b,c; i<=K; ++i){opt[i]=(Operation){a=read(),b=read(),c=read()};Modify(a,b,c,i), Modify(b,a,c,i);if(i>m)Modify(opt[i-m].a,opt[i-m].b,-opt[i-m].c,i-m), Modify(opt[i-m].b,opt[i-m].a,-opt[i-m].c,i-m);printf("%d\n",Ans);}}return 0; }

B 璀璨光滑

題目鏈接

C 構解巨樹

題目鏈接

考試代碼

A

//7.7K...(其實copy了兩遍) //暴力都可以O(n)得到答案,非得O(1)。。但是數組改map就可以60了啊 //巨難調。。 #include <map> #include <queue> #include <cstdio> #include <cctype> #include <cstring> #include <algorithm> //#define gc() getchar() #define MAXIN 300000 #define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++) typedef long long LL; const int N=1e5+5;int n,K,m; char IN[MAXIN],*SS=IN,*TT=IN; struct Operation {int a,b,c; }opt[N];inline int read() {int now=0;register char c=gc();for(;!isdigit(c);c=gc());for(;isdigit(c);now=now*10+c-'0',c=gc());return now; } namespace Subtask1 {const int S=1005;int ship[S],tm[S][S];LL mx[S],val[S][S];bool alone[S]; // struct Node // { // int mxv,tm,id; // bool operator <(const Node &x)const{ // return mxv==x.mxv?tm<x.tm:mxv<x.mxv; // } // }; // struct Heap // { // std::priority_queue<Node> q; // inline void Clear() {while(!q.empty()) q.pop();} // }hp[S];void Main(){memset(mx,0,sizeof mx);memset(tm,0,sizeof tm);memset(val,0,sizeof val); // memset(tag,0,sizeof tag);memset(ship,0,sizeof ship);memset(alone,0,sizeof alone); // for(int i=1; i<=n; ++i) hp[i].Clear();int ans=0; if(m>K) m=K;for(int i=1; i<=n; ++i) tm[i][0]=1000000;for(int i=1,a,b,c; i<=m; ++i){a=read(), b=read(), c=read(), opt[i]=(Operation){a,b,c};tm[a][b]=tm[b][a]=i;if((val[a][b]+=c)>=mx[a] && ship[a]!=b){if(ship[ship[a]]==a) ++ans, alone[ship[a]]=1;mx[a]=val[a][b], ship[a]=b;}if((val[b][a]+=c)>=mx[b] && ship[b]!=a){if(ship[ship[b]]==b) ++ans, alone[ship[b]]=1;mx[b]=val[b][a], ship[b]=a;}if(!alone[a]&&ship[a]==b&&ship[b]!=a) ++ans, alone[a]=1;else if(alone[a]&&ship[ship[a]]==a) --ans, alone[a]=0;if(!alone[b]&&ship[b]==a&&ship[a]!=b) ++ans, alone[b]=1;else if(alone[b]&&ship[ship[b]]==b) --ans, alone[b]=0;printf("%d\n",ans);}for(int i=m+1,a,b,c; i<=K; ++i){a=opt[i-m].a, b=opt[i-m].b, c=opt[i-m].c;val[a][b]-=c, val[b][a]-=c; // printf("Now:%d bef:%d a:%d b:%d\n",i,i-m,a,b);if(ship[a]==b){int p=0;for(int j=1; j<=n; ++j) if(val[a][j]>val[a][p]||(val[a][j]==val[a][p]&&tm[a][j]>tm[a][p])) p=j; // printf("a: ship[%d]=%d p:%d\n",a,b,p);if(!p){if(alone[a]) --ans, alone[a]=0;ship[a]=mx[a]=0;}else if(p!=b){if(ship[b]==a) ++ans, alone[b]=1;ship[a]=p, mx[a]=val[a][p];if(ship[p]==a){--ans, alone[p]=0;if(alone[a]) --ans, alone[a]=0;}else if(!alone[a]) ++ans, alone[a]=1;}else mx[a]-=c;} // printf("aa: %d\n",ans);if(ship[b]==a){int p=0;for(int j=1; j<=n; ++j) if(val[b][j]>val[b][p]||(val[b][j]==val[b][p]&&tm[b][j]>tm[b][p])) p=j; // printf("b: ship[%d]=%d p:%d\n",b,a,p);if(!p){if(alone[b]) --ans, alone[b]=0;ship[b]=mx[b]=0;}else if(p!=a){if(ship[a]==b) ++ans, alone[a]=1;ship[b]=p, mx[b]=val[b][p];if(ship[p]==b){--ans, alone[p]=0;if(alone[b]) --ans, alone[b]=0;}else if(!alone[b]) ++ans, alone[b]=1;}else mx[b]-=c;} // printf("bb: %d\n",ans);a=read(), b=read(), c=read(), opt[i]=(Operation){a,b,c};tm[a][b]=tm[b][a]=i;if((val[a][b]+=c)>=mx[a] && ship[a]!=b){if(ship[ship[a]]==a) ++ans, alone[ship[a]]=1;mx[a]=val[a][b], ship[a]=b;}if((val[b][a]+=c)>=mx[b] && ship[b]!=a){if(ship[ship[b]]==b) ++ans, alone[ship[b]]=1;mx[b]=val[b][a], ship[b]=a;}if(!alone[a]&&ship[a]==b&&ship[b]!=a) ++ans, alone[a]=1;else if(alone[a]&&ship[ship[a]]==a) --ans, alone[a]=0;if(!alone[b]&&ship[b]==a&&ship[a]!=b) ++ans, alone[b]=1;else if(alone[b]&&ship[ship[b]]==b) --ans, alone[b]=0;printf("%d\n",ans);}} } namespace Subtask2 {//m=kint ship[N];LL mx[N];bool alone[N];std::map<int,LL> val[N];void Main(){for(int i=1; i<=n; ++i) val[i].clear();memset(mx,0,sizeof mx);memset(ship,0,sizeof ship);memset(alone,0,sizeof alone);int ans=0;for(int i=1,a,b,c; i<=m; ++i){a=read(), b=read(), c=read();if((val[a][b]+=c)>=mx[a] && ship[a]!=b){if(ship[ship[a]]==a) ++ans, alone[ship[a]]=1;mx[a]=val[a][b], ship[a]=b;}if((val[b][a]+=c)>=mx[b] && ship[b]!=a){if(ship[ship[b]]==b) ++ans, alone[ship[b]]=1;mx[b]=val[b][a], ship[b]=a;}if(!alone[a]&&ship[a]==b&&ship[b]!=a) ++ans, alone[a]=1;else if(alone[a]&&ship[ship[a]]==a) --ans, alone[a]=0;if(!alone[b]&&ship[b]==a&&ship[a]!=b) ++ans, alone[b]=1;else if(alone[b]&&ship[ship[b]]==b) --ans, alone[b]=0;printf("%d\n",ans);}} } namespace Subtask3 {int ship[N];LL mx[N];std::map<int,int> tm[N];std::map<int,LL> val[N];bool alone[N];void Main(){memset(mx,0,sizeof mx);memset(ship,0,sizeof ship);memset(alone,0,sizeof alone);for(int i=1; i<=n; ++i) tm[i].clear(), val[i].clear();int ans=0; if(m>K) m=K;for(int i=1; i<=n; ++i) tm[i][0]=1000000;for(int i=1,a,b,c; i<=m; ++i){a=read(), b=read(), c=read(), opt[i]=(Operation){a,b,c};tm[a][b]=tm[b][a]=i;if((val[a][b]+=c)>=mx[a] && ship[a]!=b){if(ship[ship[a]]==a) ++ans, alone[ship[a]]=1;mx[a]=val[a][b], ship[a]=b;}if((val[b][a]+=c)>=mx[b] && ship[b]!=a){if(ship[ship[b]]==b) ++ans, alone[ship[b]]=1;mx[b]=val[b][a], ship[b]=a;}if(!alone[a]&&ship[a]==b&&ship[b]!=a) ++ans, alone[a]=1;else if(alone[a]&&ship[ship[a]]==a) --ans, alone[a]=0;if(!alone[b]&&ship[b]==a&&ship[a]!=b) ++ans, alone[b]=1;else if(alone[b]&&ship[ship[b]]==b) --ans, alone[b]=0;printf("%d\n",ans);}for(int i=m+1,a,b,c; i<=K; ++i){a=opt[i-m].a, b=opt[i-m].b, c=opt[i-m].c;val[a][b]-=c, val[b][a]-=c;if(ship[a]==b){int p=0;for(int j=1; j<=n; ++j) if(val[a][j]>val[a][p]||(val[a][j]==val[a][p]&&tm[a][j]>tm[a][p])) p=j;if(!p){if(alone[a]) --ans, alone[a]=0;ship[a]=mx[a]=0;}else if(p!=b){if(ship[b]==a) ++ans, alone[b]=1;ship[a]=p, mx[a]=val[a][p];if(ship[p]==a){--ans, alone[p]=0;if(alone[a]) --ans, alone[a]=0;}else if(!alone[a]) ++ans, alone[a]=1;}else mx[a]-=c;}if(ship[b]==a){int p=0;for(int j=1; j<=n; ++j) if(val[b][j]>val[b][p]||(val[b][j]==val[b][p]&&tm[b][j]>tm[b][p])) p=j;if(!p){if(alone[b]) --ans, alone[b]=0;ship[b]=mx[b]=0;}else if(p!=a){if(ship[a]==b) ++ans, alone[a]=1;ship[b]=p, mx[b]=val[b][p];if(ship[p]==b){--ans, alone[p]=0;if(alone[b]) --ans, alone[b]=0;}else if(!alone[b]) ++ans, alone[b]=1;}else mx[b]-=c;}a=read(), b=read(), c=read(), opt[i]=(Operation){a,b,c};tm[a][b]=tm[b][a]=i;if((val[a][b]+=c)>=mx[a] && ship[a]!=b){if(ship[ship[a]]==a) ++ans, alone[ship[a]]=1;mx[a]=val[a][b], ship[a]=b;}if((val[b][a]+=c)>=mx[b] && ship[b]!=a){if(ship[ship[b]]==b) ++ans, alone[ship[b]]=1;mx[b]=val[b][a], ship[b]=a;}if(!alone[a]&&ship[a]==b&&ship[b]!=a) ++ans, alone[a]=1;else if(alone[a]&&ship[ship[a]]==a) --ans, alone[a]=0;if(!alone[b]&&ship[b]==a&&ship[a]!=b) ++ans, alone[b]=1;else if(alone[b]&&ship[ship[b]]==b) --ans, alone[b]=0;printf("%d\n",ans);}} }int main() { // freopen("a2.in","r",stdin); // freopen("my.out","w",stdout);for(int Case=read(); Case--; ){n=read(), K=read(), m=read();if(m==K) {Subtask2::Main(); continue;}if(n<=1000) {Subtask1::Main(); continue;}Subtask3::Main(); // for(int i=1; i<=K; ++i) opt[i]=(Operation){read(),read(),read()};}return 0; }

B

#include <cstdio> #include <cctype> #include <cstring> #include <algorithm> //#define gc() getchar() #define MAXIN 400000 #define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++) #define mod (1000000007) typedef long long LL; const int N=5e5+5,M=4e5+5;int n,m,lim,pw2[N],pw10[N],Enum,H[N],nxt[M],to[M],p[N]; bool vic,use[N]; char IN[MAXIN],*SS=IN,*TT=IN;inline int read() {int now=0;register char c=gc();for(;!isdigit(c);c=gc());for(;isdigit(c);now=now*10+c-'0',c=gc());return now; } inline void AddEdge(int u,int v) {if(u<v) std::swap(u,v);to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum;//big->small } inline bool Check(int v1,int v2) {for(int i=0,f=1; i<=n; ++i)if((v1>>i&1)^(v2>>i&1))if(f) f=0;else return 0;return 1; } inline bool OK(int x,int val) {for(int i=H[x]; i; i=nxt[i])if(!Check(p[to[i]],val)) return 0;return 1; } void DFS(int now,LL ans) {if(vic) return;if(now==lim) {vic=1, printf("%lld\n",ans%mod); return;}for(int x=0; x<lim; ++x)if(!use[x] && OK(now,x)){use[x]=1, p[now]=x;DFS(now+1,ans+1ll*x*pw10[now]%mod);if(vic) return;use[x]=0;} }int main() { // freopen("b1.in","r",stdin); // freopen(".out","w",stdout);pw10[0]=1;for(int i=0; i<=18; ++i) pw2[i]=1<<i;for(int i=1; i<=pw2[12]/*pw2[18]*/; ++i) pw10[i]=1ll*pw10[i-1]*10%mod;for(int Case=read(); Case--; ){n=read(), m=read(), Enum=vic=0, lim=pw2[n];for(int i=1; i<=lim; ++i) H[i]=0;for(int i=1; i<=m; ++i) AddEdge(read()-1,read()-1);DFS(0,0);for(int i=0; i<lim; ++i) use[i]=0;}return 0; }

C

#include <cstdio> #include <cctype> #include <assert.h> #include <algorithm> //#define gc() getchar() #define MAXIN 400000 #define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++) #define mod (1000000007) typedef long long LL; const int N=1e5+5,M=4e5+5;int n,m,Enum,H[N],nxt[M],to[M],sz[N],sum[N],sz2[N],sum2[N],sz3[N],sum3[N]; LL Ans; char IN[MAXIN],*SS=IN,*TT=IN;inline int read() {int now=0;register char c=gc();for(;!isdigit(c);c=gc());for(;isdigit(c);now=now*10+c-'0',c=gc());return now; } inline void AddEdge(int u,int v) {to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum;to[++Enum]=u, nxt[Enum]=H[v], H[v]=Enum; } namespace Subtask1 {const int N=4e6+5,M=N<<1;int Enum,H[N],nxt[M],to[M],sz[N],sum[N];LL Ans;inline void AddEdge(int u,int v){ // printf("%d->%d\n",u,v);to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum;to[++Enum]=u, nxt[Enum]=H[v], H[v]=Enum;}void DFS(int x,int f){sz[x]=1; LL tmp=0;for(int v,i=H[x]; i; i=nxt[i])if((v=to[i])!=f) DFS(v,x), sz[x]+=sz[v], tmp+=sum[v];sum[x]=(int)((tmp+sz[x])%mod);tmp=0;for(int v,i=H[x]; i; i=nxt[i])if((v=to[i])!=f) tmp+=1ll*(sz[x]-sz[v])*sum[v]%mod;Ans+=tmp%mod;}void Main(){for(int i=1; i<n; ++i)for(int u=read(),v=read(),j=0; j<m; ++j) AddEdge(j*n+u,j*n+v);for(int i=1,a,b; i<m; ++i) a=read()-1,b=read()-1,AddEdge(b*n+read(),a*n+read());//mmp忘了 DFS(1,1);printf("%lld\n",Ans%mod);} } void DFS(int x,int f) {sum[x]=0, sz[x]=1; LL tmp=0;for(int v,i=H[x]; i; i=nxt[i])if((v=to[i])!=f) DFS(v,x), sz[x]+=sz[v], tmp+=sum[v];sum[x]=(int)((tmp+sz[x])%mod);tmp=0;for(int v,i=H[x]; i; i=nxt[i])if((v=to[i])!=f) tmp+=1ll*(sz[x]-sz[v])*sum[v]%mod;Ans+=tmp%mod; } void DFS2(int x,int f) {LL tmp=0,size=sz3[x]+1;for(int v,i=H[x]; i; i=nxt[i])if((v=to[i])!=f) DFS(v,x), size+=sz[v], tmp+=sum[v];sz[x]=(int)(size%mod);sum[x]=(int)((tmp+sz[x]+sum3[x])%mod);tmp=0;for(int v,i=H[x]; i; i=nxt[i])if((v=to[i])!=f) tmp+=1ll*(sz[x]-sz[v])*sum[v]%mod;Ans+=tmp%mod; }int main() {freopen("c3.in","r",stdin); // freopen(".out","w",stdout);n=read(), m=read();if(1ll*n*m<=4e6) {Subtask1::Main(); return 0;} for(int i=1; i<n; ++i) AddEdge(read(),read());DFS(1,1), Ans=Ans*(m-1)%mod;sum2[1]=sum[1], sz2[1]=sz[1];for(int i=1,a,b,u,v; i<m; ++i){a=read(), b=read(), u=read(), v=read();if(!sz2[v]) DFS(v,v);sz3[u]+=sz2[v], sz3[u]>=mod&&(sz3[u]-=mod);sum3[u]+=(sum2[v]+sz2[v])%mod, sum3[u]>=mod&&(sum3[u]-=mod);}DFS2(1,1);printf("%lld\n",Ans%mod);return 0; }

轉載于:https://www.cnblogs.com/SovietPower/p/9443847.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的8.8 正睿暑期集训营 Day5的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: www视频在线观看免费 | 欧美性黄色 | 国产精久久久久久 | 91午夜在线观看 | 中文字幕日韩视频 | jvid乐乐 | 欧美xxxxx精品 | 免费人成又黄又爽又色 | 欧美一区二区三区久久久 | 国产精品一二三四五 | 亚洲一区二区在线看 | 国内精品视频在线观看 | 国产精品久草 | 亚洲国产成人va在线观看天堂 | 国产精品无码av在线有声小说 | 欧美高清一区二区 | 亚洲乱妇 | jizz内谢中国亚洲jizz | 女人18岁毛片 | 国产一区二区精品在线观看 | 亚洲人性生活视频 | 黑人干亚洲女 | 午夜影院在线观看免费 | 日本中文字幕第一页 | 欧美一级视频免费 | 天天干天天玩 | www.x日本| 91亚洲在线 | 国产欧美一区二区三区四区 | 亚洲国产一区在线 | 91资源在线播放 | 男人操女人的视频 | 天天综合天天干 | 男同毛片 | 亚洲精品成人片在线观看精品字幕 | 欧美专区亚洲专区 | 自拍视频网址 | 日本美女逼 | 午夜男人影院 | 亚洲成a人在线观看 | 国产精品九| 男女一级黄色 | 中文字幕在线免费看线人 | 国产尤物视频在线 | 天天射一射 | 九九热这里有精品视频 | 97在线免费视频观看 | 亚洲自拍中文字幕 | 美女扒开腿男人爽桶 | 野花社区视频在线观看 | 日韩欧美一区二区在线 | 无码av免费精品一区二区三区 | 手机看黄色 | 日本打屁股网站 | 欧美美女在线观看 | 久久久艹 | 五月天福利视频 | 凸凹人妻人人澡人人添 | 韩国三级hd中文字幕 | 在线播放视频高清在线观看 | 欧美裸体精品 | a片在线免费观看 | 久久精品首页 | 动漫女被黄漫免费视频 | 成年人视频在线播放 | 午夜视频在线网站 | 女生张开腿给男生桶 | 天堂网在线观看 | 国产男女猛烈无遮挡 | 亚洲天堂2015 | 孕妇毛片| 国产免费看 | 夜夜久久久| 九九免费 | 少妇精品在线 | 亚洲精品乱码久久久久久按摩观 | www,xxx日本 | 久久久久久久久99 | 农村妇女愉情三级 | 国精产品一区一区三区在线 | 九一爱爱 | 18禁网站免费无遮挡无码中文 | 西比尔在线观看完整视频高清 | 欧美在线激情视频 | 国产精品二区在线观看 | 熟女熟妇伦久久影院毛片一区二区 | 精久久久久久久 | 亚洲国产中文字幕在线观看 | www.猫咪av | 亚洲黄色免费在线观看 | 亚洲黄色精品视频 | 成人毛毛片 | 日韩在线网 | 午夜啪啪福利 | 天天操天天操天天干 | 人妻在线一区二区三区 | 国产色一区二区 | 男生和女生操操 | 欧美日韩免费一区二区三区 |