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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

模板:圆方树

發(fā)布時間:2023/12/3 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模板:圆方树 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

所謂圓方樹,就是又圓又方的樹

(逃)

前言

樹有很多良好的性質(zhì),也可以上許多算法和數(shù)據(jù)結(jié)構(gòu)
但我們對于一般圖卻沒有太多辦法…
然而,對于有些關(guān)注連同性、路徑并&交的一般圖問題,我們可以用圓方樹,轉(zhuǎn)化為樹上問題解決。

解析

簡介

把所有的點(diǎn)雙求出來,然后把每個點(diǎn)雙建成一個點(diǎn)(稱為方點(diǎn)),向點(diǎn)雙內(nèi)的所有點(diǎn)(稱為圓點(diǎn))連邊

實(shí)現(xiàn)

既然要求點(diǎn)雙,當(dāng)然要用tarjan
和普通的求tarjan求割點(diǎn)有一些區(qū)別:(越來越容易掛了)

  • 不需要在函數(shù)里特判根(但是最后需要把殘留在棧里的根彈掉)
  • 求出點(diǎn)雙彈棧時son和x不一定在棧里是相鄰的(其實(shí)比較顯然)
  • void tarjan(int x){dfn[x]=low[x]=++tim;zhan[++top]=x;for(int i=g1.fi[x];~i;i=g1.p[i].nxt){int to=g1.p[i].to;if(!dfn[to]){tarjan(to);low[x]=min(low[x],low[to]); if(low[to]==dfn[x]){++tot;g2.addline(tot,x);g2.addline(x,tot);while(zhan[top]!=to){int now=zhan[top--];++val[tot];g2.addline(now,tot);g2.addline(tot,now);}int now=to;++val[tot];g2.addline(now,tot);g2.addline(tot,now);top--;}}else low[x]=min(low[x],dfn[to]);}return; } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結(jié)

    以上是生活随笔為你收集整理的模板:圆方树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。