首页 > 其他分享 >[ABC254E] Small d and k 题解

[ABC254E] Small d and k 题解

时间:2023-12-05 12:44:41浏览次数:47  
标签:... Min 题解 ll args bfs ABC254E Small dis

题目传送门

一道暴力题。

度数和 \(k\) 那么小?直接暴力 \(n\) 遍 bfs,注意 bfs 的队列只能 push 距离不超过 \(3\) 的点。但有个问题,每次 bfs 都需要清空一次距离数组,这样子的时间复杂度是 \(O(n^2)\) 的。但也不难想到,距离数组中被赋值的地方不会很多,记录一下就行。

Code

#include <bits/stdc++.h>

const long long IMX = 1ll << 30;
const long long LMX = 1ll << 60;
const long long MOD = 998244353;

using ll = long long;
using i128 = __int128;
using ld = long double;
using f128 = __float128;

namespace xvl_ { 
	#define SP(n, x) std :: setprecision(n) << std :: fixed << x
	#define REP(i, l, r) for (auto i = (l); i <= (r); i++)
	#define PER(i, r, l) for (auto i = (r); i >= (l); i--)
	#define DEBUG(x) std :: cerr << #x << " = " << x << '\n'
	#define SZ(x) (x.size())
	#define fst first
	#define snd second
	template <typename T> T Max(T a, T b) { return a > b ? a : b; } template <typename T, typename... Args> T Max(T a, Args... args) { return a > Max(args...) ? a : Max(args...); }
	template <typename T> T Min(T a, T b) { return a < b ? a : b; } template <typename T, typename... Args> T Min(T a, Args... args) { return a < Min(args...) ? a : Min(args...); }
}
using namespace std;
using namespace xvl_;
struct Node { ll id, cnt; };
ll n, m, q;
ll dis[150005];
vector <int> G[150005];
vector <pair <int, int>> D[150005];
// first 代表编号,second 代表步数
void bfs(ll s) {
	if (s == 1) fill(dis + 1, dis + 1 + n, IMX);
	else for (auto v : D[s - 1]) dis[v.fst] = IMX;
	queue <Node> q;
	vector <int> p;
	q.push({s, 0}), dis[s] = 0;
	while (!q.empty()) {
		Node cur = q.front();
		q.pop();
		for (auto v : G[cur.id]) {
			if (cur.cnt + 1 < dis[v] and cur.cnt + 1 <= 3) {
				dis[v] = cur.cnt + 1;
				p.push_back(v);
				q.push({v, dis[v]});
			}
		}
	}
	D[s].push_back(make_pair(s, 0));
	for (auto v : p) {
		if (dis[v] <= 3) D[s].push_back(make_pair(v, dis[v]));
	}
}
int main() {
	// freopen("InName.in", "r", stdin);
	// freopen("OutName.out", "w", stdout);
	ios :: sync_with_stdio(0);
	cin.tie(nullptr);
	cin >> n >> m;
	REP(i, 1, m) {
		ll u, v;
		cin >> u >> v;
		G[u].push_back(v);
		G[v].push_back(u);
	}
	REP(i, 1, n) bfs(i);
	cin >> q;
	while (q--) {
		ll x, k, ans = 0;
		cin >> x >> k;
		for (auto v : D[x]) {
			if (v.snd <= k) ans += v.fst;
		}
		cout << ans << '\n';
	}
	return 0;
}

标签:...,Min,题解,ll,args,bfs,ABC254E,Small,dis
From: https://www.cnblogs.com/xvl-/p/17876955.html

相关文章

  • RestTemplate 请求 webservice 中文乱码问题解决【问题解决】
    添加一个Converter设置UTF-8编码@ConfigurationpublicclassRestTemplateConfig{@BeanpublicRestTemplaterestTemplate(){RestTemplaterestTemplate=newRestTemplate();//添加自定义的ClientHttpRequestInterceptor全局JSON請......
  • [ARC141D] Non-divisible Set 题解
    题目链接点击打开链接题目解法很思维的题,需要用好所有的特殊性质暴力的做法是建出图,然后求包含点\(i\)的最长反链,但这明显过不了上面的做法没用到\(a_i<2m\)的性质如何用?把\(a_i\)拆分成\(q\times2^k\;(k\)为奇数\()\)的形式,那么对于同一个\(q\),只能在其中选一个......
  • [ARC141E] Sliding Edge on Torus 题解
    题目链接点击打开链接题目解法比较套路的题首先画个图,然后把\(y-x\)相同的变成一个点(使\(y>x\))然后再两个点之间连有权边那么问题就变成求新图的每个连通块中形成的原图的连通块数量手玩几个数据发现,原图的连通块数量即为新图的所有环长的\(\gcd\),再和\(n\)的\(\gcd......
  • [AGC061C] First Come First Serve 题解
    题目链接点击打开链接题目解法易知总情况数为\(2^n\)考虑重复计算的情况为:存在\([l_i,r_i]\),满足没有\([l_j,r_j](i\neqj)\)选在此区间中可以得到一个容斥的\(dp\)做法这个转移虽然感觉很显然,但卡了我一个晚上,一直调不出令\(f_i\)为到\(i\)的容斥情况下的权值和......
  • [CF1902] Educational Codeforces Round 159 A~E 题解
    [CF1902]EducationalCodeforcesRound159A~E题解A.BinaryImbalance很快观察到如果有不同的相邻元素,那么一定有解,意味着如果全是1无解,其他有解B.GettingPoints题面很长,可以发现,最好的偷懒方式一定是把所有的课都拖到最后几天上(真实),可以简单调整证明这样是不劣的,最后......
  • CF1833G Ksyusha and Chinchilla 题解
    题意:思路:当$n\not\equiv0\space(mod\space3)$时,无解;当$n\equiv0\space(mod\space3)$时,设$size_u$表示以$u$为根的子树还剩余的节点个数,自根节点向叶子节点递归,返回时进行处理节点$u$:设节点$u$的子节点为长度为$len$的序列$v$,设......
  • [ARC120E] 1D Party 题解
    提供二分+DP做法。Solution题意给出\(n(\le2\times10^5)\)个单调递增偶整数\(a_i\),求最小的\(k\)满足每一个\(i\)都可以在\(k\)时刻之前(含)与相邻的数相遇。每个单位时间可以移动一个单位距离。思路启发式思考在想到正解之前,我们可以想想类正解。显然,在时间一单......
  • CF1695C Zero Path 题解
    题意:思路:设$minv$表示路径最小权值和,$maxv$表示路径最大权值和。当且仅当路径长度$n+m-2\equiv0\space(mod\space2)$且$minv\le0\lemaxv$时,一定有权值和为$0$的路径;否则,一定没有权值和为$0$的路径。证明:由于只能向右或向下走,路径长度......
  • CF1163B2 Cat Party (Hard Edition) 题解
    题意:思路:对于满足条件的区间$[1,x]$,有如下三种情况:$1$.所有元素出现次数都为$1$;$2$.除了一个元素出现次数为$1$之外,其余元素出现次数都相等;$3$.除了一个出现次数比其他数的出现次数多$1$的元素之外,其余元素出现次数都相等。在线处理:设$cnt_i......
  • CF1198B Welfare State 题解
    题意:有一个长度为$n$的序列$a$,给定$q$次操作,每次操作为以下两种之一:$1$.$1$$p$$x$:$a_p=x$$2$.$2$$x$:$a_i$$=$$max$$($$a_i$,$x$$)$$(1\lei\len)$求经过$q$次操作后的序列$a$。思路:$a_i$的最终值只受......