[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.mzph.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;许多的评…