传送门1:http://www.usaco.org/index.php?page=viewproblem2&cpid=111

传送门2:http://www.lydsy.com/JudgeOnline/problem.php?id=2582

这道题蛮有意思的,首先对于不同的联通块,显然我们可以分别求出方案数,然后乘法原理得出最终结果。

对于每个联通块,只有三种情况:

1,有n个顶点,n - 1条边,那么这是一棵树,可以分别把每个顶点作为根,由儿子指向父亲,所以有n种方案

2,有n个顶点,n条边,那么只是一棵基环树。其中那个环上的点一定是根,因此这种情况不能换根,但是环上也可以顺时针指,逆时针指,因此有2种方案

3,有n个顶点,> n条边,那么方案数为0,这很显然

#include <cstdio>

const int maxn = 100005;
const long long mod = 1000000007LL; int n, m, fa[maxn], u, v, fu, fv, num_ver[maxn], num_edg[maxn];
long long ans = 1;
bool book[maxn];
struct Edge {
int u, v;
} a[maxn]; int getfa(int aa) {
return fa[aa] == aa? aa: fa[aa] = getfa(fa[aa]);
}
inline long long cal(int aa) {
if (num_edg[aa] == num_ver[aa] - 1) {
return num_ver[aa];
}
if (num_edg[aa] == num_ver[aa]) {
return 2LL;
}
return 0;
} int main(void) {
freopen("alliance.in", "r", stdin);
freopen("alliance.out", "w", stdout);
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i) {
fa[i] = i;
}
for (int i = 0; i < m; ++i) {
scanf("%d%d", &a[i].u, &a[i].v);
fu = getfa(a[i].u);
fv = getfa(a[i].v);
if (fu != fv) {
fa[fu] = fv;
}
}
for (int i = 1; i <= n; ++i) {
fa[i] = getfa(i);
++num_ver[fa[i]];
}
for (int i = 0; i < m; ++i) {
++num_edg[fa[a[i].u]];
}
for (int i = 1; i <= n; ++i) {
if (!book[fa[i]]) {
ans = ans * cal(fa[i]) % mod;
book[fa[i]] = true;
}
}
printf("%I64d\n", ans);
return 0;
}

  

bzoj258 [USACO 2012 Jan Gold] Bovine Alliance【巧妙】的更多相关文章

  1. bzoj2581 [USACO 2012 Jan Gold] Cow Run【And-Or Tree】

    传送门1:http://www.usaco.org/index.php?page=viewproblem2&cpid=110 传送门2:http://www.lydsy.com/JudgeOn ...

  2. USACO翻译:USACO 2012 JAN三题(2)

    USACO 2012 JAN(题目二) 一.题目概览 中文题目名称 叠干草 分干草 奶牛联盟 英文题目名称 stacking baleshare cowrun 可执行文件名 stacking bale ...

  3. USACO翻译:USACO 2012 JAN三题(1)

    USACO 2012 JAN(题目一) 一.题目概览 中文题目名称 礼物 配送路线 游戏组合技 英文题目名称 gifts delivery combos 可执行文件名 gifts delivery c ...

  4. [USACO 2018 Jan Gold] Tutorial

    Link: USACO 2018 Jan Gold 传送门 A: 对于不同的$k$,发现限制就是小于$k$的边不能走 那么此时的答案就是由大于等于$k$的边形成的图中$v$所在的连通块除去$v$的大小 ...

  5. USACO翻译:USACO 2012 JAN三题(3)

    USACO 2012JAN(题目三) 一.题目概览 中文题目名称 放牧 登山 奶牛排队 英文题目名称 grazing climb lineup 可执行文件名 grazing climb lineup ...

  6. [USACO 2012 Open Gold] Bookshelf【优化dp】

    传送门1:http://www.usaco.org/index.php?page=viewproblem2&cpid=138 传送门2:http://www.lydsy.com/JudgeOn ...

  7. [USACO 2012 Mar Gold] Large Banner

    传送门:http://www.usaco.org/index.php?page=viewproblem2&cpid=127 又是一道这种题目,遇到一次跪一次,这次终于硬着头皮看懂了题解,但是谢 ...

  8. [USACO 2012 Feb Gold] Cow Coupons【贪心 堆】

    传送门1:http://www.usaco.org/index.php?page=viewproblem2&cpid=118 传送门2:http://www.lydsy.com/JudgeOn ...

  9. [USACO 2012 Jan Silver] Bale Share【DP】

    传送门:http://www.usaco.org/index.php?page=viewproblem2&cpid=107 没想到太不应该了,真的不应该啊! f[i][j][k]表示前i个包, ...

随机推荐

  1. Node.js开发Web后台服务(转载)

    原文:http://www.cnblogs.com/best/p/6204116.html 目录 一.简介 二.搭建Node.js开发环境 2.1.安装Node.js 2.2.安装IDE开发Node. ...

  2. kvm虚拟化学习笔记(二)之linux kvm虚拟机安装

    KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...

  3. 运行mapreduce - java.lang.InterruptedException

    错误日志: 2018-11-19 05:23:51,686 WARN [main] util.NativeCodeLoader (NativeCodeLoader.java:<clinit> ...

  4. 机器学习技法总结(五)Adaptive Boosting, AdaBoost-Stump,决策树

    上一讲主要利用不同模型计算出来的g.採用aggregation来实现更好的g.假设还没有做出来g.我们能够採用bootstrap的方法来做出一系列的"diversity"的data ...

  5. hdu4941 Magical Forest

    Problem Description There is a forest can be seen as N * M grid. In this forest, there is some magic ...

  6. Android之弹出多级菜单

    使用布局文件创建菜单:(多级菜单) 在res下创建目录menu(假设已经有啦就不用再创建了) 在该menu目录下创建XML文件这里我把文件名称命名为menu 在创建的menu.XML文件里 写入: & ...

  7. iOS 配置支付宝

    尽管非常easy,可是对于第一次接触支付宝配置的啊猿.有些细节摸不着头脑.今天就来写一个流程配置. 1.创建一个project,然后再创建一个目录,把支付宝sdk要用到的都拖到目录中.然后拖到proj ...

  8. JNI/NDK开发指南(2)

    1.生成动态库.so,存放于手机的system/lib/中(APP怎样将.so存入该文件夹,奇怪?????),Java层调用JNI的类会运行静态代码System.loadLibrary("* ...

  9. PyTorch 60 分钟入门教程:数据并行处理

    可选择:数据并行处理(文末有完整代码下载) 作者:Sung Kim 和 Jenny Kang 在这个教程中,我们将学习如何用 DataParallel 来使用多 GPU. 通过 PyTorch 使用多 ...

  10. visio 2010 修改 默认字体 字号大小 方法[整理]

    [转自]http://www.cnblogs.com/vegaliming/archive/2012/08/09/2630568.html 1.新建一个模具 2.将常用的图形放到这个模具中 3.对每个 ...