一道mst……

最开始是毫无头绪,于是就点开了--->题解

大部分题解都是矩阵树……然而第一篇题解告诉了我们暴搜也能过(

思路大概是说,对于一个图\(G\),它的所有最小生成树的相同权值的边的数量是相等的。

(这里批评自己一下(虽然AC了但是最终没有证明这个思路的正确性()

(不过花了一些时间来尝试……最后没能成功举出反例,于是就默认这是对的了()

对边的权值排序,直接跑一遍mst,用结构体来记录相同权值的边出现的次数。然后暴搜一通边就完了qwq

神仙数据

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#define mod 31011
#define MAXN 105
#define MAXM 1005
using namespace std;
struct segm
{
int u,v,w;
}e[MAXM];
struct sums
{
int l,r,value;
}a[MAXM];
int n,m,f[MAXN],toti=0,tot=0,sum,ans=1;
int find(int q)
{
if (q==f[q]) return q;
return find(f[q]);
}
bool cmp(segm x,segm y)
{
return x.w<y.w;
} void dfs(int wei,int cur,int del)
{
if (cur==a[wei].r+1)
{
if (del==a[wei].value)
{
sum++;
}
return;
}
int xx=find(e[cur].u),yy=find(e[cur].v);
if (xx!=yy)
{
f[xx]=yy;
dfs(wei,cur+1,del+1);
f[xx]=xx; f[yy]=yy;
}
dfs(wei,cur+1,del);
return;
} int main()
{
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++)
{
f[i]=i;
}
for (int i=1;i<=m;i++)
{
scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
}
sort(e+1,e+m+1,cmp);
for (int i=1;i<=m;i++)
{
if (e[i].w!=e[i-1].w)
{
a[tot].r=i-1;
a[++tot].l=i;
}
int xx=find(e[i].u),yy=find(e[i].v);
if (xx!=yy)
{
f[xx]=yy;
a[tot].value++;
toti++;
}
} if (toti!=n-1)
{
printf("0");
return 0;
}
a[tot].r=m;
for (int i=1;i<=n;i++)
{
f[i]=i;
}
for (int i=1;i<=tot;i++)
{
sum=0;
dfs(i,a[i].l,0);
ans=(ans*sum)%mod;
for (int j=a[i].l;j<=a[i].r;j++)
{
int xx=find(e[j].u),yy=find(e[j].v);
if (xx!=yy)
{
f[xx]=yy;
}
}
}
printf("%d",ans);
return 0;
}

LOJ #10070 最小生成树计数的更多相关文章

  1. 最小生成树计数 bzoj 1016

    最小生成树计数 (1s 128M) award [问题描述] 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一 ...

  2. 【bzoj1016】 JSOI2008—最小生成树计数

    http://www.lydsy.com/JudgeOnline/problem.php?id=1016 (题目链接) 题意 求图的最小生成树计数. Solution %了下题解,发现要写矩阵树,15 ...

  3. [BZOJ]1016 JSOI2008 最小生成树计数

    最小生成树计数 题目描述 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同 ...

  4. bzoj1016 [JSOI2008]最小生成树计数

    1016: [JSOI2008]最小生成树计数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3517  Solved: 1396[Submit][St ...

  5. 【BZOJ】【1016】【JSOI2008】最小生成树计数

    Kruskal/并查集+枚举 唉我还是too naive,orz Hzwer 一开始我是想:最小生成树删掉一条边,再加上一条边仍是最小生成树,那么这两条边权值必须相等,但我也可以去掉两条权值为1和3的 ...

  6. 【BZOJ】1016: [JSOI2008]最小生成树计数 深搜+并查集

    最小生成树计数 Description 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小 ...

  7. BZOJ_1016_[JSOI2008]_最小生成树计数_(dfs+乘法原理)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1016 给出一张图,其中具有相同权值的边的数目不超过10,求最小生成树的个数. 分析 生成树的计 ...

  8. BZOJ 1016: [JSOI2008]最小生成树计数( kruskal + dfs )

    不同最小生成树中权值相同的边数量是一定的, 而且他们对连通性的贡献是一样的.对权值相同的边放在一起(至多10), 暴搜他们有多少种方案, 然后乘法原理. ----------------------- ...

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

    1016: [JSOI2008]最小生成树计数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 6200  Solved: 2518[Submit][St ...

随机推荐

  1. C++中的常量函数

    (1)常量成员函数不修改对象. (2)常量成员函数在定义和声明中都需要加上 const; (3)非常量成员函数不能被常量成员函数调用,但构造函数和析构函数除外. (4)常量(cosnt对象)对象不能调 ...

  2. jenkins配置自动发送邮件,抄送

    1.安装插件.系统管理-安装插件:可选插件:搜索Email Extension 2.设置全局变量.系统管理-系统设置:a.Jenkins Location 设置发送方邮件--- b.Extended ...

  3. php中数组直接用加号相加array+array

    php中数组功能非常强大,甚至也可以直接通过+相加来合并数组. A数组 $a = ['a', 'b']; B数组 $b = ['c', 'd', 'e']; A+B结果 Array ( [0] =&g ...

  4. 2018-2019-2 网络对抗技术 20165225 Exp6 信息搜集与漏洞扫描

    2018-2019-2 网络对抗技术 20165225 Exp6 信息搜集与漏洞扫描 实践内容 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.O ...

  5. Map集合转成json数据

    maven项目需要导入一下依赖: <dependency> <groupId>net.sf.json-lib</groupId> <artifactId> ...

  6. LG3834 可持久化线段树1

    题意 给定\(N\)个整数构成的序列,将对于指定的闭区间查询其区间内的第\(K\)小值. $n \leq 2 \times 10^5 $ 思路 在\([l,r]\)区间内的数的个数,可以用\(sum[ ...

  7. linux获取网络信息函数

    获取IP地址 int sys_getIP(char *ip_addr) { ] = {"ifconfig eth0 | grep inet | cut -d: -f2 | cut -d' ' ...

  8. Linux shell编程:状态变量

    四大特殊状态变量:$?. $$. $!. $_ $?的作用是:获取执行上一个指令的执行状态返回值,返回0表示上一个命令或者程序执行成功,返回的值为非0则表示上一个命令执行失败. $$的作用是:获取当前 ...

  9. 2019春第七周作业Compile Summarize

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 在这里 我在这个课程的目标是 能更加进一步的够熟练掌握指针的用法 这个作业在那个具体方面帮助我实现目标 指针对于基础题目的做法 参考文献与 ...

  10. python基础之 序列化,os,sys,random,hashlib

    1.序列化 定义: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然 ...