首页 > 其他分享 >AtCoder Beginner Contest 306 G Return to 1

AtCoder Beginner Contest 306 G Return to 1

时间:2023-06-18 10:56:39浏览次数:55  
标签:AtCoder typedef Return Contest int 306 maxn long mk

洛谷传送门

AtCoder 传送门

考虑若干个能被 \(1\) 到达且能到达 \(1\) 的环,设它们的环长分别为 \(a_1, a_2, ..., a_k\)。

那么我们现在要每个环走若干遍,使得步数不含除 \(2\) 或 \(5\) 以外的质因子。

设第 \(i\) 个环走 \(x_i\) 遍,那么其实就是要求 \(\sum\limits_{i = 1}^k a_i x_i = 10^{10^{100}}\)。

根据裴蜀定理,要求 \(\gcd(a_1, a_2, ..., a_k)\) 不含除 \(2\) 或 \(5\) 以外的质因子。

于是问题转化成求所有环长。

考虑 dfs 树,每一条非树边都对应一个环,找非树边即可。

时间复杂度 \(O(n \log n)\),瓶颈在求 \(\gcd\)。

加强版是 CF1515G Phoenix and Odometers

code
// Problem: G - Return to 1
// Contest: AtCoder - Toyota Programming Contest 2023#3(AtCoder Beginner Contest 306)
// URL: https://atcoder.jp/contests/abc306/tasks/abc306_g
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
#define pb emplace_back
#define fst first
#define scd second
#define mems(a, x) memset((a), (x), sizeof(a))

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ldb;
typedef pair<ll, ll> pii;

const int maxn = 200100;

int n, m, d[maxn], g;
bool vis[maxn], mk[maxn];
vector<int> G[maxn], T[maxn];

void dfs(int u) {
	mk[u] = 1;
	for (int v : T[u]) {
		if (!mk[v]) {
			dfs(v);
		}
	}
}

void dfs2(int u) {
	vis[u] = 1;
	for (int v : G[u]) {
		if (!mk[v]) {
			continue;
		}
		if (!vis[v]) {
			d[v] = d[u] + 1;
			dfs2(v);
		} else {
			int t = abs(d[u] + 1 - d[v]);
			g = __gcd(g, t);
		}
	}
}

void solve() {
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= n; ++i) {
		vector<int>().swap(G[i]);
		vector<int>().swap(T[i]);
		d[i] = 0;
		vis[i] = mk[i] = 0;
	}
	while (m--) {
		int u, v;
		scanf("%d%d", &u, &v);
		G[u].pb(v);
		T[v].pb(u);
	}
	g = 0;
	dfs(1);
	dfs2(1);
	if (!g) {
		puts("No");
		return;
	}
	while (g % 2 == 0) {
		g /= 2;
	}
	while (g % 5 == 0) {
		g /= 5;
	}
	puts(g == 1 ? "Yes" : "No");
}

int main() {
	int T = 1;
	scanf("%d", &T);
	while (T--) {
		solve();
	}
	return 0;
}

标签:AtCoder,typedef,Return,Contest,int,306,maxn,long,mk
From: https://www.cnblogs.com/zltzlt-blog/p/17488808.html

相关文章

  • How to AK ABC306
    HowtoAKABC306A题意:吧字符串的每个字符连续输出两遍,记得不要快读,不要忘记输入$n$纪念QinzhA题WA掉B题意:给定长度为$64$的数组$A$,输出$\sum_{i=0}^{63}A_i2^i$暴力模拟即可注意要开unsignedlonglong纪念我WA了$2$次,第一次用的int,第二次......
  • 【题解】Atcoder ABC300 F.More Holidays(线性做法)
    F.MoreHolidays题目描述:给你一个由o和x组成的长度为\(N\)的字符串\(S\),以及整数\(M\)和\(K\)。保证\(S\)至少包含一个x。假设\(T\)是由\(S\)复制\(M\)次而成的长度为\(NM\)的字符串。考虑将\(T\)中的\(K\)个x恰好替换为o。你的目标是在替换后的......
  • 单调栈复习01_230617
    主要关注栈内元素放置的是什么栈头-栈尾递增还是递减,寻找右侧最大元素,则栈内元素递增;例如Leetcode的每日温度,实则寻找右侧首个大于自身的元素位置,则栈内元素为下标、栈内元素逐渐增大,如果遍历到的元素小于栈顶元素则入栈,否则出栈主要逻辑如下:vector<int>dailyTemperatur......
  • ABC306 Poisonous Full-Course
    Atcoder题目链接题目大意Takahashi要品尝\(N\)个菜品.这些菜品中有些是有毒的,有些是解药.当他吃下第\(i\)个菜品时,他的总美味值会增加\(Y_{i}\),同时有以下效果:如果吃下的菜品是有毒的(\(X_{i}=1\)),且他现在的胃是健康的,他的胃转变为不舒服的;如果他现在的胃已......
  • AtCoder Beginner Contest 306
    A-Echo(abc306a)题目大意给定一个字符串,将每个字符输出两次。解题思路模拟即可。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;intmain(void){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);intn;......
  • The baby-bust economy “婴儿荒”经济 | 经济学人20230603版社论双语精翻
    2023年6月3日《经济学人》(TheEconomist)封面文章暨社论(Leaders)精选:《“婴儿荒”经济》(“Thebaby-busteconomy”)。baby-bust即“婴儿荒”(生育低谷),与历史上1946~1964年间著名的baby-boom即“婴儿潮”(生育高峰)相对立。Thebaby-busteconomy“婴儿荒”经济Globalfertilityhascoll......
  • AtCoder ABC056D 题解
    题目直达0x00思路从大到小枚举每个元素,同时加入\(sum\)进行累计,当\(k\lesum\)时,便会返现之前的元素可以构成“好的组”(因为他们都大于\(p_i\)),即有用的,所以要清空。0x01举个例子36143我们对输入排序后,会得到\(p\)为。431这时,我们的\(i=1\),即\(p_i=......
  • AtCoder ABC228D 题解
    [ABC299D]FindbyQuery题解0x00题目分析题目传送门经过分析,我们得到的几个关键信息:\(n\le2\times10^5\)最多可以问法官\(20\)个问题。s[1]=0,s[n]=1分析\(n\)的范围,发现\(\log_n=17.6096\),刚好比\(20\)小一点点。这时便考虑二分的做法。看到s[1]=0,......
  • AtCoder ABC047D 题解
    题意理解&分析:大概的题意应该是十分清晰的,就是一个人要从\(1\)到\(n\)的城市中买苹果。另一个人要其中调整价格。这里的调整也不需要太多,就\(1\)就可以了。但是,如果有多组购买方案可以得到相同的利润,就还需要将其他相同的价格一并调整。这道题的关键就在于求出有几组购买......
  • SummerResearch_Log_20230616
    WorkingContent:1.学到的关于VCL方法的几个点:(1)最小化KL散度=最大化ELBO(EvidenceLowerBound)。tyxe的源代码应该用的就是最大化ELBO,这里loss是由关于ELBO的函数得到的(具体怎么得到的不太知道)。(2)源代码用了Pyro库中的SVI,是一种类。......