Codechef:Path Triples On Tree

Path Triples On Tree

?

題意是求樹上都不相交或者都相交的路徑三元組數量。

發現blog里沒什么樹形dp題,也沒有cc題,所以來丟一道cc上的樹形dp題。

比較暴力,比較惡心

#include<cstdio>
#include<algorithm>
#define MN 300001
#define ui long long
using namespace std;ui read_p,read_ca;
inline ui read(){read_p=0;read_ca=getchar();while(read_ca<'0'||read_ca>'9') read_ca=getchar();while(read_ca>='0'&&read_ca<='9') read_p=read_p*10+read_ca-48,read_ca=getchar();return read_p;
}
ui n,N,m,l[MN],num=0,fa[MN],s[MN],d[MN],_s[MN],S[MN],GS[MN],_S[MN],si[MN],MMH=0,_MMH=0,x,y;
struct na{ui y,ne;}b[MN<<1];
inline void in(ui x,ui y){b[++num].y=y;b[num].ne=l[x];l[x]=num;}
const ui MOD=1e9+7;
inline ui _M(ui x){while(x>=MOD)x-=MOD;while(x<0)x+=MOD;return x;}
inline void M(ui &x){while(x>=MOD)x-=MOD;while(x<0)x+=MOD;}
void dfs(ui x){si[x]=1;ui i,k=0,al=0;for (i=l[x];i;i=b[i].ne) if (!si[b[i].y]) fa[b[i].y]=x,dfs(b[i].y),al=(1LL*si[x]*si[b[i].y]+al)%MOD,si[x]+=si[b[i].y],M(s[x]+=s[b[i].y]),M(k+=d[b[i].y]);for (i=l[x];i;i=b[i].ne) if (b[i].y!=fa[x])M(MMH+=1LL*d[b[i].y]*(al-1LL*si[b[i].y]*(si[x]-si[b[i].y])%MOD)%MOD+1LL*_s[b[i].y]*(si[x]-si[b[i].y])%MOD-MOD),M(GS[x]+=1LL*s[b[i].y]*(si[x]-si[b[i].y])%MOD+GS[b[i].y]-MOD);s[x]=(1LL*al*si[x]+s[x])%MOD;M(S[x]=(1LL*(si[x]-1)*si[x]>>1)%MOD*si[x]%MOD-s[x]);d[x]=(1LL*al*(al-1)>>1)%MOD;_s[x]=k;for (i=l[x];i;i=b[i].ne) if (b[i].y!=fa[x])d[x]=(1LL*(si[x]-si[b[i].y])*s[b[i].y]+d[b[i].y]+d[x])%MOD,_s[x]=(1LL*(k-d[b[i].y])*si[b[i].y]+_s[x]+_s[b[i].y])%MOD,M(_S[x]+=(1LL*GS[b[i].y]*(si[x]-si[b[i].y])+(-1LL*si[b[i].y]*(si[x]-si[b[i].y])%MOD+al)*s[b[i].y]+_S[b[i].y])%MOD);}
void DFS(ui x,ui v,ui _v){ui i,S=0,AL=0,k=0,_k=0,P=0,al=0,o;for (i=l[x];i;i=b[i].ne) if (b[i].y!=fa[x])M(al+=1LL*(si[x]-si[b[i].y])*si[b[i].y]%MOD),M(k+=s[b[i].y]),M(_k+=1LL*s[b[i].y]*(n-si[b[i].y])%MOD),M(P+=d[b[i].y]),M(AL+=(1LL*(si[b[i].y]+1)*(n-si[b[i].y])-1)%MOD*si[b[i].y]%MOD);al=1LL*(al+si[x]-1)*((MOD+1)/2)%MOD;M(MMH+=1LL*v*al%MOD);for (i=l[x];i;i=b[i].ne) if (b[i].y!=fa[x]) o=S=_M((1LL*(si[x]-si[b[i].y])*(n-si[x])-1LL*(si[x]-si[b[i].y])*si[b[i].y]+al)%MOD),o=1LL*o*(n-si[b[i].y])%MOD,S=(1LL*S*(S-1)>>1)%MOD,M(S+=P-d[b[i].y]),DFS(b[i].y,_M(_M(v+_k-1LL*s[b[i].y]*(n-si[b[i].y])%MOD-1LL*(k-s[b[i].y])*si[b[i].y]%MOD)+1LL*(si[x]-si[b[i].y])*_v%MOD-MOD+S),_M(_v+k-MOD-s[b[i].y]+o));
}
void _DFS(ui x){ui i,k=0,al=0;for (i=l[x];i;i=b[i].ne) if (b[i].y!=fa[x]) _DFS(b[i].y),M(al+=1LL*(si[x]-si[b[i].y])*si[b[i].y]%MOD);al=1LL*(al+si[x]-1)*((MOD+1)/2)%MOD;for (i=l[x];i;i=b[i].ne) if (b[i].y!=fa[x]) M(_MMH+=((1LL*(si[x]-si[b[i].y])*(n-si[x])-1LL*(si[x]-si[b[i].y])*si[b[i].y]+al)%MOD*(si[x]-si[b[i].y])%MOD+k)*s[b[i].y]%MOD),M(k+=s[b[i].y]);for (i=l[x];i;i=b[i].ne) if (b[i].y!=fa[x]) M(_MMH+=1LL*GS[b[i].y]*(n-si[b[i].y])%MOD*(si[x]-si[b[i].y])%MOD),M(_MMH+=1LL*_S[b[i].y]*(si[x]-si[b[i].y])%MOD);
}
int main(){register ui i;n=read();for (i=1;i<n;i++) x=read(),y=read(),in(x,y),in(y,x);N=(1LL*n*(n-1)>>1)%MOD;m=1LL*N*(N-1)%MOD*(N-2)%MOD*((MOD+1)/6)%MOD;dfs(1);DFS(1,0,0);_DFS(1);M(m-=MMH+_MMH);printf("%lld\n",m);
}
View Code

?

轉載于:https://www.cnblogs.com/Enceladus/p/6764938.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254754.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254754.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254754.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

grbl

第一次發帖...之前上論壇都是查資料的&#xff0c;發現gcode這一塊資料比較少先說一下Gcode:Gcode在工業控制上用的很多&#xff0c;是一種通用的控制指令&#xff0c;數控機床上經常用&#xff0c;在我diy雕刻機&#xff08;打印機之類的&#xff09;的時候要用到&#xff0c;…

mybitis實現增,刪,改,查,模糊查詢的兩種方式:(2)

方式二&#xff1a;mapper代理接口方式 這種方式只需要xml接口&#xff08;不用寫實體類&#xff09;但是需要符合三個規范 使用mapper代理接口方式在同一目錄下&#xff08;可以創建一個源文件夾&#xff0c;達到類文件和xml文件分類的作用&#xff09;xml中namespace&#xf…

C語言中的靜態函數的作用

轉載 在C語言中為什么要用靜態函數(static function)&#xff1f;如果不用這個static關鍵字&#xff0c;好象沒有關系。那么&#xff0c;用了static以后&#xff0c;有什么作用呢&#xff1f;我們知道&#xff0c;用了static的變量&#xff0c;叫做靜態變量&#xff0c;其意義是…

[轉] sql server 跨數據庫調用存儲過程

A庫存儲過程&#xff1a; create PROCEDURE [dbo].[spAAAForTest] ( UserName nvarchar(20) null ,LoginPwd nvarchar(60) null ) AS BEGINselect NA AS a, NB AS B, NC AS C;END 同一臺服務器實例&#xff0c;A&#xff0c;B兩個數據庫&#xff0c;…

get_metrology_object_result_contour查詢計量對象的結果輪廓

目錄get_metrology_object_result_contour&#xff08;算子&#xff09;描述參數get_metrology_object_result_contour&#xff08;算子&#xff09; get_metrology_object_result_contour - 查詢計量對象的結果輪廓。 get_metrology_object_result_contour&#xff08;&…

ABB 機器人 壓包指令PackRawBytes 解包指令UnpackRawBytes

ABB 壓包指令PackRawBytes 解包指令UnpackRawBytes PackRawBytes- 將數據導入 rawbytes 數據。 使用方法 PackRawBytes 用于將 num, dnum, byte,或者 string類型的數據&#xff0c;打包到 rawbytes 類型的變量中. 基本舉例 &#xff1a; VAR rawbytes raw_…

C語言中使用靜態函數的好處

靜態函數會被自動分配在一個一直使用的存儲區&#xff0c;直到退出應用程序實例&#xff0c;避免了調用函數時壓棧出棧&#xff0c;速度快很多。 關鍵字“static”&#xff0c;譯成中文就是“靜態的”&#xff0c;所以內部函數又稱靜態函數。但此處“static”的含義不是指存儲方…

react+redux+generation-modation腳手架搭建一個todolist

TodoList1. 編寫actions.js2. 分析state 試著拆分成多個reducer3. 了解store4. 了解redux數據流生命周期5. 分析容器組件和展示組件 搞清楚&#xff0c;數據到底是如何流動的&#xff1f;6. 編寫展示組件的代碼7. 編寫容器組件8. 傳入store9. 總結10. 參考TodoList 腳手架Githu…

c++11 原子類型與原子操作

1、原子類型和原子操作&#xff08;1&#xff09;類型&#xff08;2&#xff09;操作&#xff08;3&#xff09;詳述● 原子類型只能從其模板參數類型中進行構造&#xff0c;標準不允許原子類型進行拷貝構造、移動構造&#xff0c;以及使用operator等● atomic_flag 是一個原子…

get_metrology_object_measures獲取測量區域和計量模型的計量對象的邊緣位置結果

目錄get_metrology_object_measures&#xff08;算子&#xff09;描述參數get_metrology_object_measures&#xff08;算子&#xff09; get_metrology_object_measures - 獲取測量區域和計量模型的計量對象的邊緣位置結果。 get_metrology_object_measures&#xff08;&…

依弗科(上海)機電設備有限公司

機器人噴涂倒計時&#xff0c;上帝幫我實現愿望吧 阿門 &#xfeff;&#xfeff;&#xfeff;&#xfeff;

外部變量和外部函數

C程序由一組對象組成&#xff0c;這些對象包括程序中所使用的變量和實現特定功能的函數。變量可以分為函數內部定義、使用的變量和函數外部定義的變量&#xff0c;通常情況下&#xff0c;把函數內部定義、使用的變量稱為內部變量或局部變量&#xff0c;而將在函數外部定義的、供…

gulp中使用babel-polyfill編譯es6拓展語法

今天想在新項目中使用es6的generators&#xff0c;發現雖然gulp已經有了babel編譯&#xff0c;但仍會報錯&#xff0c;網上查找后發現解決辦法是加載polyfill&#xff0c;但是找到的辦法都不試用我的項目。 解決辦法&#xff1a;在index.html中加載node_modules的babel-polyfil…

CoDeSys

&#xfeff;&#xfeff;CoDeSys是全球最著名的PLC內核軟件研發廠家德國的3S&#xff08;SMART&#xff0c;SOFTWARE&#xff0c;SOLUTIONS&#xff09;公司出的一款與制造商無關的IEC 61131-1編程軟件。CoDeSys 支持完整版本的IEC61131標準的編程環境&#xff0c;支持標準的六…

使用halcon結合機械XY軸對相機進行9點標定

小哥哥小姐姐覺得有用點個贊唄&#xff01; 先在halcon中計算仿射變換矩陣并驗證 //在圖像中找到的模板中心位置 PicX:[1680.721,2065.147,911.499,526.798,1290.920,1285.731,1300.953] PicY:[968.321,964.366,976.283,980.035, 587.055,394.727,1355.487] //與圖像中查找…

Ubuntu Linux 提出新的發布模式——測試周

2019獨角獸企業重金招聘Python工程師標準>>> 導讀開源技術項目最大的優勢之一就是社區的每個人都可以自由地提出想法&#xff0c;如果獲得社區支持&#xff0c;它可以變成現實。著名的 Ubuntu 開發人員 Simon Quigley 就提出了一個可能改變 Ubuntu Linux 開發過程的…

264 I和IDR

I和IDR幀都是使用幀內預測的。它們都是同一個東西而已,在編碼和解碼中為了方便&#xff0c;要首個I幀和其他I幀區別開&#xff0c;所以才把第一個首個I幀叫IDR&#xff0c;這樣就方便控制編碼和解碼流程。IDR幀的作用是立刻刷新,使錯誤不致傳播,從IDR幀開始,重新算一個新的序列…

gen_caltab生成標定文件

目錄gen_caltab&#xff08;算子&#xff09;描述參數gen_caltab&#xff08;算子&#xff09; gen_caltab - 為具有矩形排列標記的校準板生成校準板描述文件和相應的PostScript文件。 gen_caltab&#xff08;:: XNum&#xff0c;YNum&#xff0c;MarkDist&#xff0c;Diamet…