传送门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. Python开发的一个IDE推荐,Sublime Text 3

    Sublime Text 3 官网下载地址为, LINK. 目前最新版本是3114. 这里转载泱泱长空的授权文件(注册码)文章[1],将几个可以用的注册码列举如下: 补充:2016.05 最近经过测试 ...

  2. mysql too many connection 解决办法

    SHOW VARIABLES LIKE "max_connections"; SHOW VARIABLES LIKE "wait_timeout"; SET G ...

  3. asp.net core 集成JWT(一)

    [什么是JWT] JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案. JWT的官网地址:https://jwt.io/ 通俗地来讲,JWT是能代表用户身份的令牌,可以使用JWT ...

  4. SeaGlass:手工搭建伪基站监控系统

    “伪基站”即假基站,设备一般由主机和笔记本电脑或手机组成,通过短信群发器.短信发信机等相关设备能够搜取以其为中心.一定半径范围内的手机卡信息,利用2G移动通信的缺陷,通过伪装成运营商的基站,冒用他人手 ...

  5. eclipse中导入其它的webproject遇到和解决的问题

    注:下面为我从网上搜来的方法.经使用及学习后整理. 学习javaweb有段时间了.对于导入新项目.遇到好多问题.但终于成功了. 错误1:string cannot be resolved to a t ...

  6. 配置 Apache 服务器禁止所有非法域名 访问自己的服务器

    .http2..1以前: 第一种 直接拒绝访问 打开 httpd.conf 文件,将一下配置追加到文件最后. <pre name="code" class="htm ...

  7. Setting Up FastCGI Proxying

    http://nginx.org/en/docs/beginners_guide.html

  8. SAP 常用增强记录文档

    转自:http://blog.csdn.net/budaha 20170215需要一个PR 修改保存时候的增强,目的是同步PR的处理状态 EBAN-STATU 到一个自建表ZTPRTOPO,记得有个P ...

  9. eclipse svn修改用户名密码

    1,svn客户端删除 2,eclipse 补充,上图为网友资料,但实际操作过程中,发现eclipse中svn为svnkit,但相应目录下无.keyring文件,最后按步骤2删除auth下所有文件,再次 ...

  10. linux下开机启动svn配置

    1.在 vi /etc/rc.local文件下添加以下: /home/svn/subversion-1.8.18/bin/svnserve -d --listen-port 3690 -r /home ...