P3043 [USACO12JAN]牛联盟(并查集+数学)

(m<n<=1e5,有重边)
题目表述有问题.....
给定一张图(不一定联通),每条边可以选择连接的两个点之一,剩余的点可以自己成对,问方案数。
一开始是真的被吓到了....觉得可写性极低的一题.....
但是两个结论如果推出来的话就蛮好的了
solution:
一开始想:对于每个块进行大小统计,然后组合数乘在一起。但是,有点麻烦:
有环的情况:对于一个联通块有环,那么就会有n个点,n条边,那就意味着会有一个联通块只有一个单独的点。单独考虑环块(下统称环块)

看看这个三元环(误),先确定第一条边选左或右两个点,如果第一个边确定了自己的选择,那么它就会占用下一条边的一个选择的权利,也就是:
如果确定了一条边,就可以确定整个环上的方案数:2
如果不是裸环的环块呢?
看这个:

同上,确定了环上的两个,链的一端就会被占用,也就是说:
只要是环块,对答案的贡献就是2!
(伟大的发现)
考虑无环的情况:
一共n个点,n-1条边(无向图,不能有环就是树),一共有n种方案。感性证明一下(不知道该怎么理性):
最后一个点不被选,而这个不被选的点一共有n种情况,这就是n种方案。
最后根据乘法原理,把所有的方案数乘起来就是ans。
综上结论,题目就变成了:给定一张图,判断联通块大小,找联通块里的环,统计答案
联通块?我有并查集!
找环?我有tarjan!
(旁边两位z姓大佬给我闷头两巴掌,这题还tarjan?你想变成zwjdd长度???)
这里介绍一种无向图判环方法(注意,不是找环,只能判断存在)
还是使用并查集,原理就是在一个联通块内,如果遍历边的次数=点的个数,那么这里就存在环。
貌似是这样哈....我太弱了
代码(注释版):
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+;
const int mod=1e9+;
long long f[maxn],num[maxn],n,m,ans=,c[maxn];
long long find(long long x){return f[x]==x?x:f[x]=find(f[x]);}//被大佬逼的一行冰茶姬
//variable declare:num[]:联通块大小,f[]不解释,c[]联通块内边的数量
int main()
{
scanf("%lld%lld",&n,&m);
for(int i=;i<=n;i++)
f[i]=i,num[i]=;//初始化
for(int i=;i<=m;i++)
{
long long x,y;
scanf("%lld%lld",&x,&y);
long long fa=find(x);
long long fb=find(y);
if(fa!=fb)//合并
{
f[fa]=fb;
num[fb]+=num[fa];//把联通块大小合并
num[fa]=;//清零联通块大小
c[fb]+=c[fa]+;//联通块内多了一条边
}
else
{
c[fb]++;//否则多了一条非树边
}
}
for(int i=;i<=n;i++)
{
if(f[i]==i&&c[i]<num[i])//如果边数没有点数多
ans=ans*num[i]%mod;//统计答案
else if(f[i]==i&&c[i]>=num[i])//否则就是有环,直接*2
ans=(ans<<)%mod;//记得续命
}
printf("%lld",ans);//longlong又出锅了
return ;
}
(完)
P3043 [USACO12JAN]牛联盟(并查集+数学)的更多相关文章
- P3043 [USACO12JAN]牛联盟Bovine Alliance(并查集)
P3043 [USACO12JAN]牛联盟Bovine Alliance 题目描述 Bessie and her bovine pals from nearby farms have finally ...
- 洛谷P3043 [USACO12JAN]牛联盟Bovine Alliance
P3043 [USACO12JAN]牛联盟Bovine Alliance 题目描述 Bessie and her bovine pals from nearby farms have finally ...
- P3043 [USACO12JAN]牛联盟Bovine Alliance——并查集
题目描述 给出n个点m条边的图,现把点和边分组,每条边只能和相邻两点之一分在一组,点可以单独一组,问分组方案数. (友情提示:每个点只能分到一条边,中文翻译有问题,英文原版有这样一句:The cows ...
- BZOJ1051:受欢迎的牛(并查集 / Tarjan)
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 8161 Solved: 4460 Description ...
- [USACO12JAN]牛联盟Bovine Alliance
传送门:https://www.luogu.org/problemnew/show/P3043 其实这道题十分简单..看到大佬们在用tarjan缩点,并查集合并.... 蒟蒻渣渣禹都不会. 渣渣禹发现 ...
- HDU 5441 Travel (并查集+数学+计数)
题意:给你一个带权的无向图,然后q(q≤5000)次询问,问有多少对城市(城市对(u,v)与(v,u)算不同的城市对,而且u≠v)之间的边的长度不超过d(如果城市u到城市v途经城市w, 那么需要城市u ...
- BZOJ 2303: [Apio2011]方格染色 [并查集 数学!]
题意: $n*m:n,m \le 10^6$的网格,每个$2 \times 2$的方格必须有1个或3个涂成红色,其余涂成蓝色 有一些方格已经有颜色 求方案数 太神了!!!花我三节课 首先想了一下只有两 ...
- 并查集&线段树&树状数组&排序二叉树
超级无敌巨牛逼并查集(带权并查集)https://vjudge.net/problem/UVALive-4487 带删点的加权并查集 https://vjudge.net/problem/UVA-11 ...
- 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D
目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...
随机推荐
- python编程基础之二十七
列表生成式:[exp for iter_var in iterable] 同样也会有字典生成式,集合生成式,没有元组生成式,元组生成式的语法被占用了 字典生成式,集合生成式,就是外面那个括号换成{} ...
- Be Nice!要善良
[1] It is nice to be important, but it is more important to be nice. [2] What simple act of kindne ...
- 深入理解 web 协议(一)- http 包体传输
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/WlT8070LlrnSODFRDwZsUQ作者:吴越 开坑这个系列的原因,主要是在大前端学习的 ...
- php的cookie怎么使用
PHP中Cookie的使用---添加/更新/删除/获取Cookie 及 自动填写该用户的用户名和密码和判断是否第一次登陆 什么是cookie? 服务器在客户端保存用户的信息,比如登录名,密码等. 这些 ...
- SpringCloud之RefreshScope 源码解读
SpringCloud之RefreshScope @Scope 源码解读 Scope(org.springframework.beans.factory.config.Scope)是Spring 2. ...
- 2019.10.26 CSP%您赛第三场
\(CSP\)凉心模拟^_^ --题源\(lqx.lhc\)等各位蒟蒻 题目名称 比赛 传递消息 开关灯 源文件名 \(competition.cpp\) \(message.cpp\) \(ligh ...
- (一)如何理解java面向对象编程
哲学中,事物总是螺旋式上升,波浪式前进.因而编程也逐渐向人类更容易理解的方向前进,多年来人们苦苦追求的编程境界 : 高扩展性(extensibility),高复用性(reuseable).java语言 ...
- @RequestParam设置默认可以传空值
设置如下:@RequestParam(value="CbqkJson[]",required=false)String[] CbqkJson required=false 如果不设 ...
- 你真的了解 volatile 关键字吗?
今天,让我们一起来探讨 Java 并发编程中的知识点:volatile 关键字 本文主要从以下三点讲解 volatile 关键字: volatile 关键字是什么? volatile 关键字能解决什么 ...
- unity发布ios高通AR的问题
1)缺少引用,无法找到vuforiaBehavior 原因:Windows下的工程,直接考到mac下,导致unity自带插件(2017)有问题 解决:首先在playerSettings-xrSetti ...