From 16b858295bbc682074b45da0db441c8794a4b5e6 Mon Sep 17 00:00:00 2001 From: 24OI-bot <15963390+24OI-bot@users.noreply.github.com> Date: Wed, 24 Jul 2019 23:01:41 -0400 Subject: [PATCH] style: format markdown files with remark-lint --- docs/ds/lct.md | 236 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 118 insertions(+), 118 deletions(-) diff --git a/docs/ds/lct.md b/docs/ds/lct.md index 9da2f748..4efd62c3 100644 --- a/docs/ds/lct.md +++ b/docs/ds/lct.md @@ -831,7 +831,7 @@ LCT 并不能直接处理边权,此时需要对每条边建立一个对应点 数据保证至少存在一棵生成树。 -$1\le n\le 5\times 10^4,1\le m\le 2\times 10^5,1\le w_i\le 10^4$ + $1\le n\le 5\times 10^4,1\le m\le 2\times 10^5,1\le w_i\le 10^4$ 将边按照边权从小到大排序,枚举选择的最右边的一条边,要得到最优解,需要使边权最小边的边权最大。 @@ -844,127 +844,127 @@ LCT 上没有固定的父子关系,所以不能将边权记录在点权中。 ??? "参考代码" ```cpp - #include - #include - #include - #include - using namespace std; - const int maxn=5000010; - struct Splay - { - int ch[maxn][2],fa[maxn],tag[maxn],val[maxn],minn[maxn]; - void clear(int x){ch[x][0]=ch[x][1]=fa[x]=tag[x]=val[x]=minn[x]=0;} - int getch(int x){return ch[fa[x]][1]==x;} - int isroot(int x){return ch[fa[x]][0]!=x&&ch[fa[x]][1]!=x;} - void maintain(int x) - { - if(!x)return; - minn[x]=x; - if(ch[x][0]){if(val[minn[ch[x][0]]]mp; - int main() - { - scanf("%d%d",&n,&m); - for(int i=1;i<=n;i++)st.val[i]=inf,st.maintain(i); - for(int i=1;i<=m;i++)scanf("%d%d%d",&s[i].u,&s[i].v,&s[i].w); - sort(s+1,s+m+1); - for(int i=1;i<=m;i++)st.val[n+i]=s[i].w,st.maintain(n+i); - for(int i=1;i<=m;i++) - { - x=s[i].u;y=s[i].v; - if(x==y)continue; - if(st.find(x)!=st.find(y)) - { - nww++;st.link(x,n+i);st.link(n+i,y);mp.insert(s[i].w); - if(nww==n-1)ans=s[i].w-(*(mp.begin()++)); - } - else - { - st.makeroot(x);st.access(y);st.splay(y); - int t=st.minn[y]-n; - st.cut(s[t].u,t+n);st.cut(t+n,s[t].v);mp.erase(mp.find(s[t].w)); - st.link(x,n+i);st.link(n+i,y);mp.insert(s[i].w); - if(nww==n-1)ans=min(ans,s[i].w-(*(mp.begin()++))); - } - } - printf("%d\n",ans); - return 0; - } + #include + #include + #include + #include + using namespace std; + const int maxn=5000010; + struct Splay + { + int ch[maxn][2],fa[maxn],tag[maxn],val[maxn],minn[maxn]; + void clear(int x){ch[x][0]=ch[x][1]=fa[x]=tag[x]=val[x]=minn[x]=0;} + int getch(int x){return ch[fa[x]][1]==x;} + int isroot(int x){return ch[fa[x]][0]!=x&&ch[fa[x]][1]!=x;} + void maintain(int x) + { + if(!x)return; + minn[x]=x; + if(ch[x][0]){if(val[minn[ch[x][0]]]mp; + int main() + { + scanf("%d%d",&n,&m); + for(int i=1;i<=n;i++)st.val[i]=inf,st.maintain(i); + for(int i=1;i<=m;i++)scanf("%d%d%d",&s[i].u,&s[i].v,&s[i].w); + sort(s+1,s+m+1); + for(int i=1;i<=m;i++)st.val[n+i]=s[i].w,st.maintain(n+i); + for(int i=1;i<=m;i++) + { + x=s[i].u;y=s[i].v; + if(x==y)continue; + if(st.find(x)!=st.find(y)) + { + nww++;st.link(x,n+i);st.link(n+i,y);mp.insert(s[i].w); + if(nww==n-1)ans=s[i].w-(*(mp.begin()++)); + } + else + { + st.makeroot(x);st.access(y);st.splay(y); + int t=st.minn[y]-n; + st.cut(s[t].u,t+n);st.cut(t+n,s[t].v);mp.erase(mp.find(s[t].w)); + st.link(x,n+i);st.link(n+i,y);mp.insert(s[i].w); + if(nww==n-1)ans=min(ans,s[i].w-(*(mp.begin()++))); + } + } + printf("%d\n",ans); + return 0; + } ``` ### 一些题 -- [luogu P4172 \[WC2006\]水管局长](https://www.luogu.org/problem/P4172) +- [luogu P4172\[WC2006\]水管局长](https://www.luogu.org/problem/P4172) - [luogu P4180【模板】严格次小生成树\[BJWC2010\]](https://www.luogu.org/problemnew/show/P4180) -- 2.11.0