[JSOI2008]最小生成樹計數

?

OJ題號:
  BZOJ1016

題目大意:
  給定一個無向帶權圖,求最小生成樹的個數。

思路:
  先跑一遍最小生成樹,統計相同權值的邊出現的個數。
  易證不同的最小生成樹,它們不同的那一部分邊的權值實際上是相同的。
  所以我們可以暴力枚舉相同權值的邊,統計加入這些邊總共能有多少種方法。
  根據乘法原理,把每種邊的方法數乘起來即可。
  然后就O(2^n)暴力水過這道題。
  實際上用Matrix-Tree可以做到O(n^3)。

  1 */
  2 #include<cstdio>
  3 #include<cctype>
  4 #include<vector>
  5 #include<algorithm>
  6 
  7 inline int getint() {
  8     register char ch;
  9     while(!isdigit(ch=getchar()));
 10     register int x=ch^'0';
 11     while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
 12     return x;
 13 }
 14 const int mod=31011;
 15 const int V=101;
 16 
 17 struct Edge1 {
 18     int u,v,w;
 19     bool operator < (const Edge1 &another) const {
 20         return w<another.w;
 21     }
 22 };
 23 std::vector<Edge1> e1;
 24 
 25 struct Edge {
 26     int to,w;
 27 };
 28 std::vector<Edge> e[V];
 29 inline void add_edge(const int &u,const int &v,const int &w) {
 30     e[u].push_back((Edge){v,w});
 31 }
 32 
 33 struct DisjointSet {
 34     int anc[V],cnt;
 35     int find(const int &x) const {
 36         return x==anc[x]?x:find(anc[x]);
 37     }
 38     void reset(const int &n) {
 39         cnt=n;
 40         for(register int i=1;i<=n;i++) {
 41             anc[i]=i;
 42         }
 43     }
 44     void Union(const int &x,const int &y) {
 45         anc[find(x)]=find(y);
 46         cnt--;
 47     }
 48     bool isConnected(const int &x,const int &y) const {
 49         return find(x)==find(y);
 50     }
 51     int stat() const {
 52         return cnt;
 53     }
 54 };
 55 DisjointSet s;
 56 
 57 struct Hash {
 58     unsigned l,r;
 59     int v;
 60 };
 61 std::vector<Hash> a;
 62 
 63 inline void kruskal() {
 64     std::sort(e1.begin(),e1.end());
 65     for(register unsigned i=0;i<e1.size();i++) {
 66         if(!i) {
 67             a.push_back((Hash){0,0,0});
 68         } else if(e1[i].w!=e1[i-1].w) {
 69             a.back().r=i-1;
 70             a.push_back((Hash){i,0,0});
 71         }
 72         const int &u=e1[i].u,&v=e1[i].v,&w=e1[i].w;
 73         if(s.isConnected(u,v)) continue;
 74         s.Union(u,v);
 75         add_edge(u,v,w);
 76         add_edge(v,u,w);
 77         a.back().v++;
 78     }
 79     a.back().r=e1.size()-1;
 80 }
 81 
 82 int tmp;
 83 void dfs(const int &in,const unsigned x,const int d) {
 84     if(x>a[in].r) {
 85         if(d==a[in].v) tmp++;
 86         return;
 87     }
 88     const int &u=e1[x].u,&v=e1[x].v;
 89     const int p=s.find(u),q=s.find(v);
 90     if(p!=q) {
 91         s.anc[p]=q;
 92         dfs(in,x+1,d+1);
 93         s.anc[p]=p;
 94         s.anc[q]=q;
 95     }
 96     dfs(in,x+1,d);
 97 }
 98 
 99 int main() {
100     int n=getint();
101     for(register int m=getint();m;m--) {
102         const int u=getint(),v=getint(),w=getint();
103         e1.push_back((Edge1){u,v,w});
104     }
105     s.reset(n);
106     kruskal();
107     if(s.stat()!=1) {
108         puts("0");
109         return 0;
110     }
111     s.reset(n);
112     int ans=1;
113     for(register unsigned i=0;i<a.size();i++) {
114         tmp=0;
115         dfs(i,a[i].l,0);
116         ans=(ans*tmp)%mod;
117         for(register unsigned j=a[i].l;j<=a[i].r;j++) {
118             const int &u=e1[j].u,&v=e1[j].v;
119             if(s.isConnected(u,v)) continue;
120             s.Union(u,v);
121         }
122     }
123     printf("%d\n",ans);
124     return 0;
125 }

?

轉載于:https://www.cnblogs.com/skylee03/p/7575427.html

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

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

相關文章

vuex webpack 配置_vue+webpack切換環境和打包之后服務器配置

import axios from ‘axios‘import store from ‘../store/index‘const rootUrl process.env.API_ROOT//創建axios實例const service axios.create({timeout:30000 //超時時間})//添加request攔截器service.interceptors.request.use(config >{if (Object.keys(config.hea…

redis基本用法學習(C#調用FreeRedis操作redis)

FreeRedis屬于常用的基于.net的redis客戶端&#xff0c;EasyCaching中也提供適配FreeRedis的包。根據參考文獻4中的說法&#xff0c;FreeRedis和CsRedis算是近親&#xff08;都是GitHub中賬號為2881099下的開源項目&#xff09;&#xff0c;因此其用法特別相似。FreeRedis的主要…

opencv:圖像的基本變換

0.概述 圖像變換的基本原理都是找到原圖和目標圖的像素位置的映射關系&#xff0c;這個可以用坐標系來思考&#xff0c;在opencv中&#xff0c; 圖像的坐標系是從左上角開始(0,0)&#xff0c;向右是x增加方向(cols)&#xff0c;向下時y增加方向(rows)。 普通坐標關系&#xff1…

FFMpeg在Windows環境下的編譯

1&#xff0e;安裝MinGW &#xff08;1&#xff09;下載文件&#xff1a;MinGW-5.1.4.exe&#xff0c; &#xff08;2&#xff09;安裝時選擇下列組件&#xff1a; binutils-2.19.1-mingw32-bin.tar.gz gcc-core-3.4.5-20060117-3.tar.gz gcc-g-3.4.5-20060117-3.tar.gz …

中通知設置響鈴_主動切斷干擾源——手機“通知”精細化管理

上周去參加我福福幼兒園的母親節活動&#xff0c;內容是孩子和家長一起穿手鏈。期間我發現和我同桌的一個家長的手機不停在響&#xff0c;當然伴隨著注意力被打斷。不僅是這位家長自己&#xff0c;連我也受到了干擾。于是職業病又犯了&#xff0c;我悄悄的看了一眼這位家長的手…

OCM_第十九天課程:Section9 —》Data Guard _ DATA GUARD 原理/DATA GUARD 應用/DATA GUARD 搭建...

注&#xff1a;本文為原著&#xff08;其內容來自 騰科教育培訓課堂&#xff09;。閱讀本文注意事項如下&#xff1a;1&#xff1a;所有文章的轉載請標注本文出處。2&#xff1a;本文非本人不得用于商業用途。違者將承當相應法律責任。3&#xff1a;該系列文章目錄列表&#xf…

python安裝各種插件

http://www.lfd.uci.edu/~gohlke/pythonlibs/#pip 感受&#xff1a;如果編輯pip真的一直出問題&#xff0c;考慮降成32位的進行安裝。畢竟合理搭配比木桶突出有用。轉載于:https://www.cnblogs.com/osmondwang/p/7307678.html

編寫數學公式的好工具

2019獨角獸企業重金招聘Python工程師標準>>> http://private.codecogs.com/latex/eqneditor.php 轉載于:https://my.oschina.net/yizhichao/blog/1542153

dev gridview 打印列數過多_R語言:如何將多張統計圖繪制在一張上面

在使用R語言進行數據可視化的時候&#xff0c;常常需要將多張統計圖表繪制在同一張圖上面&#xff0c;從而更高效地傳遞信息&#xff0c;下面我們就來一起看看具體如何實現。一、使用R語言自帶的函數繪制的圖像R語言本身就已經內置了許多繪圖函數&#xff0c;能夠滿足較為基本的…

264分析兩大利器 和 視頻系列下載:264VISA和Elecard StreamEye Tools

學了264有將近3個月有余&#xff0c;好多時候都在學習老畢的書和反復看JM86的代碼&#xff0c;最近才找到264分析兩大利器&#xff1a;264VISA和Elecard StreamEye Tools。不由得感嘆&#xff0c;恨不逢同時。 簡單的說下這兩個軟件&#xff1a; 264visa 強力的h264實時分析工具…

[轉]vue全面介紹--全家桶、項目實例

慢慢了解vue及其全家桶的過程 原文http://blog.csdn.net/zhenghao35791/article/details/67639415 簡介 “簡單卻不失優雅&#xff0c;小巧而不乏大匠”。 2016年最火的前端框架當屬Vue.js了&#xff0c;很多使用過vue的程序員這樣評價它&#xff0c;“vue.js兼具angular.js和R…

opencv 星空_opencv如何將大于5000像素點的輪廓繪制出來?

contourArea函數的運用。具體例子可以看下面的。《如何獲得物體的主要方向&#xff1f;》代碼略解&#xff1a;1、讀入圖片&#xff0c;尋找輪廓&#xff1b;//讀入圖像&#xff0c;轉換為灰度Mat img imread("e:/sandbox/pca1.jpg");Mat bw;cvtColor(img, bw, COLO…

TS 188字節流結構圖

應該說真正了解TS&#xff0c;還是看了朋友推薦的《數字電視業務信息及其編碼》一書之后&#xff0c;MPEG2 TS和數字電視是緊密不可分割的&#xff0c;值得總結一下其中的一些關系。 ISO/IEC&#xff0d;13818&#xff0d;1&#xff1a;系統部分&#xff1b; ISO/IEC&#xff…

二進制安裝mysql 5.7、mariadb (附yum安裝方式)

前言&#xff1a;本文以mariadb為例進行講解&#xff0c;安裝mysql同理&#xff0c;并以通過測試。安裝前查找系統已安裝的相關包&#xff08;rpm -qa|grep -e "mysql" -e "mariadb"&#xff09;并進行卸載。1、準備mariadb存儲數據庫文件的目錄。mkdir -p…

GLSL/C++ 實現濾鏡效果

入門效果之浮雕 "浮雕"圖象效果是指圖像的前景前向凸出背景。常見于一些紀念碑的雕刻上。要實現浮雕事實上很easy。我們把圖象的一個象素和左上方的象素進行求差運算。并加上一個灰度。這個灰度就是表示背景顏色。這里我們設置這個插值為128 (圖象RGB的值是0-255)。同…

cv mat的shape_pybind11—opencv圖像處理(numpy數據交換)

前言C opencv中圖像和矩陣的表示采用Mat類&#xff0c;比如imread()讀取的結果就是返回一個Mat對象。對于python而言&#xff0c;numpy 通常用于矩陣運算&#xff0c; 矩陣&#xff0c;圖像表示為numpy.ndarray類。因此&#xff0c;想要將python numpy.ndarray的數據傳遞到C op…

H.264算法的優化策略

文章來源&#xff1a; http://www.tichinese.com/Article/Video/200909/2150.html 編輯&#xff1a;小乙哥 1 代碼優化的主要方法 通過代碼移植能夠獲得在DSP上初步運行的代碼&#xff0c;但是它由于沒有考慮到DSP自身的硬件特點&#xff0c;不適合DSP強大的并行處理能力&#…

吃飯、睡覺、打星星之“打星星”!

大家見過這樣的星星么&#xff1f; 你想要多少就可以多少的星星&#xff01;&#xff01;&#xff01; 下面我們就來用奇妙的JavaScript來實現 首先我們要引入一個輸入包 let readline require("readline-sync");然后再讓客戶輸入數字&#xff0c;并將其存放起來con…

mysql 自動分表_Mysql Event 自動分表

create table TempComments Like dycomments;上述 SQL語句創建的新表帶有原表的所有屬性&#xff0c;主鍵&#xff0c;索引等。自動分表怎么做呢&#xff1f;使用上述語句自動創建分表。那么ID怎么設置呢&#xff1f;更改表格自增主鍵的起始值 例如 表格為 xxx_201604 那么將起…

《大道至簡》周愛民讀后感

作為一個準大二的軟件工程系的學生&#xff0c;初讀此書&#xff0c;很多部分是不太容易理解的&#xff0c;自己又沒有經歷過&#xff0c;感覺差了一個高度似的。自己讀的挺蒙&#xff0c;于是就去百度了一下這本書的讀后感&#xff0c;看看別人讀懂了什么&#xff0c;許多的評…