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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LOJ.2587.[APIO2018]铁人两项Duathlon(圆方树)

發布時間:2025/4/14 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LOJ.2587.[APIO2018]铁人两项Duathlon(圆方树) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接 LOJ
洛谷P4630

先對這張圖建圓方樹。
對于S->T這條(些)路徑,其對答案的貢獻為可能經過的所有點數,那么我們把方點權值設為聯通分量的大小,可以直接去求樹上路徑權值和。
因為兩方點之間的圓點會計算兩次,所以圓點權值設為-1就好了。
那么現在有 \(n^2\) 個點對,求每個點對之間的路徑上點的權值和。
對每個點計算一下被計算次數就可以了。這個路徑次數計算注意考慮全。。

另外點對是圓點間的,所以方點初始sz[]為0,圓點的sz[]才是1。
方點其實建一條邊就可以。

LOJ為什么找不到代碼框的位置了。。交了兩次文件CE了兩次,是代碼不能加注釋?
好了 原來網頁放大后代碼框就沒了。。

//344ms 11.82MB/2573ms 12668K #include <cstdio> #include <cctype> #include <algorithm> #define gc() getchar() const int N=100005<<1,M=4e5+7;//2N!→_→int n,m,tot,sk[N],top,dfn[N],low[N],Index,fa[N],sz[N],val[N]; long long Ans; struct Graph {int H[N],Enum,to[M],nxt[M];inline void Add_E(int u,int v){to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum;}inline void AddEdge(int u,int v){Add_E(u,v), Add_E(v,u);} }G,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 Tarjan(int x) {dfn[x]=low[x]=++Index, sk[++top]=x, val[x]=-1;for(int v,i=G.H[x]; i; i=G.nxt[i])if(!dfn[v=G.to[i]]){fa[v]=x, Tarjan(v), low[x]=std::min(low[x],low[v]);if(dfn[x]<=low[v]){T.Add_E(x,++tot), val[tot]=1;do{T.Add_E(tot,sk[top--]), ++val[tot];}while(sk[top+1]!=v);//別在這把x彈掉。。x可能是多個環的根節點。}}else low[x]=std::min(low[x],dfn[v]); } void pre_DFS(int x,int f)//這個dfs還是可以省的吧... {if(x<=n) sz[x]=1;for(int i=T.H[x]; i; i=T.nxt[i])if(T.to[i]!=f) pre_DFS(T.to[i],x), sz[x]+=sz[T.to[i]]; } void Solve(int x,int f,int tot) {if(x<=n) Ans+=1ll*(tot-1)*val[x];//以x為起點的路徑數 Ans+=1ll*(tot-sz[x])*sz[x]*val[x];//起點在x到根方向的一側,終點在另一側 for(int i=T.H[x]; i; i=T.nxt[i])Ans+=1ll*val[x]*(tot-sz[T.to[i]])*sz[T.to[i]], Solve(T.to[i],x,tot);//起點在子樹方向,終點到其它地方去(包括x)//注意剛開始算了個以x為起點的數,直接交換起點終點(*2)是不對的! } //void Solve(int x,int f,int tot) //{ // if(x<=n) Ans+=2ll*(tot-1)*val[x];//以x為起點&終點的路徑數 // int sum=tot-sz[x]; // for(int i=T.H[x]; i; i=T.nxt[i]) // Ans+=2ll*val[x]*sum*sz[T.to[i]], sum+=sz[T.to[i]], Solve(T.to[i],x,tot); //}int main() {tot=/*!*/n=read(),m=read();while(m--) G.AddEdge(read(),read());for(int i=1; i<=n; ++i)//不一定連通。。這個很坑if(!dfn[i]) Tarjan(i), pre_DFS(i,i), Solve(i,i,sz[i]);printf("%lld",Ans);return 0; }

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

總結

以上是生活随笔為你收集整理的LOJ.2587.[APIO2018]铁人两项Duathlon(圆方树)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 山村大伦淫第1部分阅读小说 | 一区二区视频播放 | 色欲无码人妻久久精品 | 免费一区二区三区 | 日韩欧美黄色大片 | 亚洲视频在线免费看 | 精品国产一区二区三区日日嗨 | 黄色网址哪里有 | 夜夜天堂| 免费的黄色网址 | 国产 日韩 欧美 综合 | 国产中文字幕在线播放 | 成人免费视频毛片 | 亚洲精品电影在线观看 | 第九色 | 奇米影视首页 | 夜夜操夜夜爽 | 亚洲欧美天堂 | 精品热| 国内视频精品 | 天天精品 | www.久久av.com | 西西人体大胆4444ww张筱雨 | 欧美人与禽性xxxxx杂性 | 欧美激情一区二区 | 久久人人爽人人爽 | 日韩一级影院 | 69视频一区二区 | av巨作| 国产精品xxxxx| 日韩精品视频一区二区在线观看 | 超碰中文字幕 | 久久无码视频网站 | 国产福利合集 | 快色网站| 欧美xxxx83d | 午夜精品一区二区三区在线播放 | 亚洲狠狠婷婷综合久久久久图片 | 亚洲经典一区 | 97精品人妻一区二区三区在线 | 麻豆视频在线免费看 | 四虎av网址 | 久久一精品 | 亚洲日本视频 | 日本大尺度做爰呻吟舌吻 | 51久久久 | 日韩一级免费看 | 黄色一级片一级片 | 麻豆av免费观看 | 中文字幕一区二区三区四区 | 国产精美视频 | 韩国伦理电影免费在线 | 久久99一区 | 亚洲成人av电影 | 91色吧| 亚洲午夜精品久久久久久app | 亚洲成a人片 | 午夜av毛片| 国产美女白浆 | 亚洲精品第二页 | 日本蜜桃视频 | 九九热精品视频在线观看 | 日日摸日日添日日碰9学生露脸 | 天天影视插插插 | 猎艳山村丰满少妇 | 人妻大战黑人白浆狂泄 | 国产老头户外野战xxxxx | 夜夜操网址 | 伊人伦理| 永久免费看片在线观看 | 91国产一区| 国产91网 | 黄色一级网址 | 狠狠爱综合网 | 99这里都是精品 | 色片在线播放 | 久久亚洲综合国产精品99麻豆精品福利 | 日本一级理论片在线大全 | 免费在线观看视频a | 91看黄| 欧美巨乳美女 | 亚洲综合视频网 | 亚洲精品乱码久久久久久蜜桃不卡 | 国产视频在线免费观看 | 欧美日韩在线观看一区二区 | 精品国产一区二区三区久久久蜜月 | 青青草国产成人99久久 | 好吊妞在线观看 | 欧美在线播放一区二区 | 欧美贵妇videos办公室 | 在线免费av网站 | 久久精品国产精品 | 久久久久亚洲精品国产 | 国产黄色一区 | 午夜男人网 | 99久久精品国产色欲 | 国产尻逼 | 久久不卡视频 | 日日夜夜伊人 |