首页 > 其他分享 >P3043 [USACO12JAN] Bovine Alliance G

P3043 [USACO12JAN] Bovine Alliance G

时间:2024-07-08 21:19:19浏览次数:7  
标签:std sz P3043 int fy USACO12JAN fa Alliance ans

P3043 [USACO12JAN] Bovine Alliance G

并查集

每个连通块方案数独立。考虑一个连通块的情况,显然如果 \(m>n\) 一定无解,那么就只有 \(m=n\) 和 \(m=n-1\) 两种情况,前者是基环树,后者是树。

基环树的环上,第一条边选择的端点确定,其他也就确定,共有两种情况。环下的树选择固定。所有总方案数为 \(2\) 种。

树上所有边的端点选择完后,会剩下唯一的节点,将这个节点作为根,那么子树的选择也是固定的。由于这唯一的节点任意,所以方案数就是连通块的节点数。

那么就可以维护连通块内边数和点数计算答案了,用并查集即可。

复杂度 \(O(n\log n)\)。

#include <bits/stdc++.h>
#define pii std::pair<int, int>
#define mk std::make_pair
#define fi first
#define se second
#define pb push_back

using i64 = long long;
using ull = unsigned long long;
const i64 iinf = 0x3f3f3f3f, linf = 0x3f3f3f3f3f3f3f3f;
const int N = 1e5 + 10, mod = 1e9 + 7;
int n, m;
i64 ans = 1;
int fa[N], cnt[N], sz[N];
int find(int x) {
	if(x != fa[x]) fa[x] = find(fa[x]);
	return fa[x];
}
void merge(int x, int y) {
	int fx = find(x), fy = find(y);
	if(fx == fy) cnt[fy]++;
	else {
		fa[fx] = fy, cnt[fy] += cnt[fx] + 1;
		sz[fy] += sz[fx];
	}
}
int vis[N];
int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    
	std::cin >> n >> m;

	for(int i = 1; i <= n; i++) fa[i] = i, sz[i] = 1;
	for(int i = 1; i <= m; i++) {
		int u, v;
		std::cin >> u >> v;
		merge(u, v);
	}

	for(int i = 1; i <= n; i++) {
		int x = find(i);
		if(!vis[x]) {
			if(cnt[x] > sz[x]) ans = 0;
			else if(cnt[x] == sz[x]) ans = ans * 2 % mod;
			else ans = ans * sz[x] % mod;
			vis[x] = 1;
		}
	}

	std::cout << ans << "\n";

	return 0;
}

标签:std,sz,P3043,int,fy,USACO12JAN,fa,Alliance,ans
From: https://www.cnblogs.com/FireRaku/p/18290719

相关文章

  • 车载以太网的未来:OPEN Alliance下17个技术委员会的最新进展与行业影响(上)
        OPENAllianceSIG(One-PairEtherNetSpecialInterestGroup)是一个非营利的、开放的行业联盟,成员主要是来自全世界的160多个汽车主机厂和供应商。迄今为止,OPENAlliance成立了17个技术委员会(Techcommittee,TC),各技术委员会通过解决车载以太网在不同方向的问题,合作推动......
  • P1561 [USACO12JAN] Mountain Climbing S
    P1561[USACO12JAN]MountainClimbingS贪心思路首先我们设\(c_i\)为第\(i\)头牛上山后又下山的时间。那么有两种情况,我们分类讨论。第\(i\)头牛上到山顶时,第\(i-1\)头牛还未下到山脚。第\(i-1\)头牛下山完毕但第\(i\)头牛还在上山。那么\(c_i\)的公式......
  • Scrum Alliance联盟认证体系,什么是SCRUM认证体系 ?
    ​Scrum认证是一个针对个人职业发展的认证体系,基础级认证主要面向Scrum的三个角色:ScrumMaster、ScrumProductOwner和Developers。Scrum认证体系由Scrum官方机构—国际Scrum联盟(ScrumAlliance.org)制定和维护,Scrum认证证书由Scrum联盟统一颁发。Scrum中文网是Scrum联盟在中国......
  • 外汇天眼:【千亿金融诈骗案】专骗有钱人的券商「澳丰金融AYERS Alliance」!
    大咖投资人争先投资澳丰旗下基金,前总统李登辉家族也在其中,图为李安妮。(资料照片引用J周刊)J周刊报导,受害投资人表示,由于购买澳丰商品门槛是10万美元起跳,有一定资金门槛,能投资的都是金字塔顶端,除媒体曾披露过驻世贸组织代表罗昌发夫妇踩雷及10家上市柜企业中招外,总受害人数超过1.3万......
  • 基于以太网的软件定义视频与 SDVoE Alliance
    什么是SDVoE? WhatisSDVoE?SDVoE(SoftwareDefinedVideo-over-Ethernet)isthelatesthigh-performance,software-basedAV-over-IPplatformforcontrolanddistributionofaudiovisualsystemsofaEthernet/Fibernetworks.Providingasoftware-basedAVplatf......
  • 《Learning to Resolve Alliance Dilemmas in Many-Player Zero-Sum Games》 2020-AAM
    学习解决多人零和博弈中的联盟困境总结:将两人的零和博弈扩展到多人零和博弈,并将多人零和博弈中的联盟问题转为社会困境问题用基于强化学习的方法进行解决。先是说明了一......
  • [USACO12JAN]Video Game G【AC自动机+DP】
    “Canamanstillbebraveifhe’safraid?”“Thatistheonlytimeamancanbebrave.”每天六点多起床,整理好寝室内务后就去图书馆研读论文和处理邮件,完成后......