BZOJ 1016--[JSOI2008]最小生成树计数(kruskal搜索)

1016: [JSOI2008]最小生成树计数

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 7429  Solved: 3098
[Submit][Status][Discuss]

Description

  现在给出了一个简单无向加权图。你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树。(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的)。由于不同的最小生成树可能很多,所以你只需要输出方案数对31011的模就可以了。

Input

  第一行包含两个数,n和m,其中1<=n<=100; 1<=m<=1000; 表示该无向图的节点数和边数。每个节点用1~n的整数编号。接下来的m行,每行包含两个整数:a, b, c,表示节点a, b之间的边的权值为c,其中1<=c<=1,000,000,0
00。数据保证不会出现自回边和重边。注意:具有相同权值的边不会超过10条。

Output

  输出不同的最小生成树有多少个。你只需要输出数量对31011的模就可以了。

Sample Input

4 6
1 2 1
1 3 1
1 4 1
2 3 2
2 4 1
3 4 1

Sample Output

8

题目链接:

    http://www.lydsy.com/JudgeOnline/problem.php?id=1016 

Solution

  首先可以发现在不同的最小生成树中,同权值的边的数量是一样的。。

  于是可以将每种权值的边的贡献分开算,然后用乘法原理就可以了。。

  对于某一种颜色,直接爆搜。。。感觉复杂度好像不太对。。。但是过了。。。

  算了反正都不知道多久之前写的了。。。

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#define M 1010
#define mod 31011
using namespace std;
int n,m,cnt,tot;
int f[M],w[M],sum[M];
bool c[M];
struct edge{int l,r,w;
}e[M],a[M];
bool cmp(edge p,edge q){return p.w<q.w;}
int find(int x){if(f[x]==x) return f[x];return find(f[x]);
}
void RE(){for(int i=1;i<=n;i++) f[i]=i;}
void dfs(int x,int now,int k){if(now==a[x].r+1){if(k==a[x].w)tot++;return;}int xx=find(e[now].l),yy=find(e[now].r);if(xx!=yy){f[xx]=yy;dfs(x,now+1,k+1);f[xx]=xx;f[yy]=yy;}dfs(x,now+1,k);
}
int main(){int ans=1;cnt=0;tot=0;int xx,yy;scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)scanf("%d%d%d",&e[i].l,&e[i].r,&e[i].w);sort(e+1,e+1+m,cmp);RE();for(int i=1;i<=m;i++){if(e[i].w!=e[i-1].w){a[cnt].r=i-1;cnt++;a[cnt].l=i;}xx=find(e[i].l);yy=find(e[i].r);if(xx!=yy){f[xx]=yy;a[cnt].w++;tot++;}}a[cnt].r=m;if(tot+1!=n){printf("0\n");return 0;}RE();for(int i=1;i<=cnt;i++){tot=0;dfs(i,a[i].l,0);ans=(ans*tot)%mod;for(int j=a[i].l;j<=a[i].r;j++){xx=find(e[j].l);yy=find(e[j].r);if(xx!=yy) f[xx]=yy;}}printf("%d\n",ans);return 0;
}

  

  

This passage is made by Iscream-2001.

 

转载于:https://www.cnblogs.com/Yuigahama/p/9671568.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python until语句_详解Lua中repeat...until循环语句的使用方法

与for和while循环不同&#xff0c;在循环的顶部测试循环条件&#xff0c;Lua编程语言的repeat...until 循环检查循环底部的状态。repeat...until 循环类似于while循环&#xff0c;不同的是do ... while循环是保证至少执行一次。语法Lua编程语言repeat...until循环的语法是&…

Javascript s08

AJAX ------------------------- AJAX 指异步 JavaScript 及 XML&#xff08;Asynchronous JavaScript And XML&#xff09;。 举例! 异步是发短信,同步是打电话. 异步的时候,会有回调. 想用JS去服务器拿数据? 客户端的JS.所以没有能力去服务器拿信息 借用服务端的PHP,JS模拟一…

linux驱动开发---并发控制

中断屏蔽 local_irq_disable();/* 临界代码*/local_irq_enable();2.原子操作 整形原子操作&#xff1a;void atomic_set(atomix_t *v,int i) //设置原子变量值为iatomic_t v ATOMIC_INIT(2); //设原子变量v值为2atomic_read(atomic_t *v);void atomic_add(int i,atomic_t *…

安卓APP_ 布局(8) —— 基于 RecyclerView 的 ViewPager2翻页

摘自&#xff1a;安卓APP_ 布局&#xff08;8) —— 基于 RecyclerView 的 ViewPager2翻页 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-04-20 15:37:54 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/115803077 viewpager2 是对Recycler…

Python基础—06-函数基础

函数基础 函数简介 定义&#xff1a;就是具有特定功能的一段代码优点&#xff1a; 解决代码的重复书写可以将功能的实现着和使用者分开&#xff0c;提高开发效率分类&#xff1a; 库函数&#xff1a;print、input、abs等自定义&#xff1a;用户自己封装的函数函数使用 定义函数…

python encode gbk_[转]Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法

使用Python写文件的时候&#xff0c;或者将网络数据流写入到本地文件的时候&#xff0c;大部分情况下会遇到&#xff1a;UnicodeEncodeError: gbk codec cant encode character \xa0 in position ... 这个问题。 网络上有很多类似的文件讲述如何解决这个问题&#xff0c;但是无…

iisnode默认不支持PUT和DELETE的解决

因为iisnode的自动重启服务器方便&#xff0c;一直用的它来作为开发中的node服务器&#xff0c;今天一个delete命令过去&#xff0c;得到一个405(?好像是&#xff09;错误&#xff0c;让我很郁闷。用原生的node试一下&#xff0c;是完美支持的&#xff0c;本来打算用Node算了的…

域名配置备忘录

几个国内yum镜像&#xff1a; http://mirrors.163.com/ //网易镜像 http://mirrors.aliyun.com/ //阿里镜像 http://centos.ustc.edu.cn/ //中科镜像 http://mirrors.sohu.com/ //搜狐镜像 yum 配置文件路径 . /etc/yum.repos.d/ 命令 yum clean all yum makecache

iOS延迟执行

传送门 转载于:https://www.cnblogs.com/GoodmorningMr/p/9673140.html

安卓APP_ Fragment(4)—— Fragment + ViewPager2 模拟微信首页 (1)两者联动实现翻页

摘自&#xff1a;安卓APP_ Fragment&#xff08;4&#xff09;—— Fragment ViewPager2 模拟微信首页 &#xff08;1&#xff09;两者联动实现翻页 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-04-20 17:46:59 网址&#xff1a;https://blog.csdn.net/weixin_4474…

python列表相关函数_python中列表(list)相关的函数

1.列表相关的内置函数all(iterable):这个函数返回一个布尔值。如果iterable的所有元素都为真(或iterable自身为空)则返回True&#xff0c;否则返回False。例&#xff1a;all[2,3,0]将返回Falseany(iterable):这个函数返回一个布尔值。如果iterable的任一元素为真则返回True&…

linux添加window启动

系统&#xff1a;centos 文件&#xff1a;/boot/grub2/grub.cfg 追加内容&#xff1a; menuentry “Windows 7” { insmod part_msdos insmod ntfs set root’(hd0,msdos1)’ chainloader 1 }

KVM学习笔记

KVM 全称是 基于内核的虚拟机&#xff08;Kernel-based Virtual Machine&#xff09;&#xff0c;它是一个 Linux 的一个内核模块&#xff0c;该内核模块使得 Linux 变成了一个 Hypervisor&#xff1a; 它由 Quramnet 开发&#xff0c;该公司于 2008年被 Red Hat 收购。它支持 …

Linux网络编程(Socket)

目录网络编程&#xff08;Socket&#xff09;概述引入网络编程通识扫盲socket套接字套接字描述符字节序socket编程步骤Linux提供的API简析创建套接字即连接协议[socket]&#xff08;服、客&#xff09;绑定IP和端口[bind]&#xff08;服&#xff09;地址转换api字节序转换api监…

调DHT22

传感器一共有4个脚&#xff0c;支持iic和单总线 拿到官方文档感觉唤醒时许很简单&#xff0c;mcu先拉低800us;然后释放总线等待(20-200us)传感器响应分析响应信号是传感器先拉低80us然后拉高80us&#xff0c;之后开始发送数据。 看起来简单但我调试了几小时传感器都没有响应&…

selenium的三种等待时间

//隐式等待(20秒以内没哥一段时间就会去找元素&#xff0c;如果没找大也不会报错&#xff0c;过了20s才会报错)//driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);//显示等待WebDriverWait wait new WebDriverWait(driver,10);wait.until(ExpectedCondition…

嵌入式开发概述(树莓派介绍)

目录嵌入式定义嵌入式芯片选型ARM架构ARM树莓派嵌入式定义 国内普遍认同的嵌入式系统的定义是以应用为中心&#xff0c;以计算机技术为基础&#xff0c;软硬件可裁剪&#xff0c;适应应用系统对功耗、可靠性、成本、体积、功耗等严格要求的专用计算机系统。 嵌入式系统是软件和…

ubuntu 16gcc g++版本降级

打算在ubuntu16上编译linux3.4.66内核&#xff0c;但是遇到 In file included from include/linux/compiler.h:48:0, from include/linux/stddef.h:4, from include/linux/posix_types.h:4, from include/linux/types.h:17, from include/linux/page-flags.h:8, from kern…

android 系统gpu 调试_【资讯】高通公布首批可OTA更新GPU驱动手机:谷歌Pixel 4/三星S10在列...

文章转载自&#xff1a;iT之家原文链接&#xff1a;https://www.ithome.com/0/479/483.htm(IT之家3月25日消息) 谷歌今天宣布了一系列面向游戏开发者的新工具&#xff1a;Google Play Asset Delivery、Android性能调节器&#xff0c;Android GPU检查器和Cloud Firestore等&…

Generator 函数的异步应用

异步编程对 JavaScript 语言太重要。Javascript 语言的执行环境是“单线程”的&#xff0c;如果没有异步编程&#xff0c;根本没法用&#xff0c;非卡死不可。本章主要介绍 Generator 函数如何完成异步操作。 传统方法 ES6 诞生以前&#xff0c;异步编程的方法&#xff0c;大概…