首页 > 其他分享 >THUPC 2023 决赛 百合

THUPC 2023 决赛 百合

时间:2023-12-15 13:00:11浏览次数:22  
标签:决赛 typedef pq emplace THUPC int ll long 2023

洛谷传送门

LOJ 传送门

QOJ 传送门

复读官方题解。

考虑除了原图的 \(2^k\) 个点,再建一些辅助点,\((u, i, j)\) 表示前 \(i\) 位中修改了 \(j\) 位得到 \(u\)。那么除了原图的 \(m\) 条边,我们还有下面这些边:

  • \(u \xrightarrow{0} (u, 0, 0)\);
  • \(\forall i < k, (u, i, j) \xrightarrow{0} (u, i + 1, j)\);
  • \(\forall i < k, (u, i, j) \xrightarrow{0} (u \oplus 2^i, i + 1, j + 1)\);
  • \((u, k, j) \xrightarrow{a_j} u\)。

到这里可以做 \(O(2^k k^3)\),但是还不够。

观察这个图,发现非 \(0\) 边仅有 \(O(2^k k)\) 条,于是我们在外层 Dijkstra 的同时,内层对 \(u\) 能到达的所有辅助点跑一遍 BFS,给每个辅助点打上是否被访问过的标记,于是每个辅助点只会被访问一次,又因为非 \(0\) 边仅有 \(O(2^k k)\) 条,所以外层的堆也只会被 push 这么多次。所以时间复杂度就是 \(O(2^k k^2)\),空间复杂度也是 \(O(2^k k^2)\)。

code
// Problem: P9377 [THUPC 2023 决赛] 百合
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P9377
// Memory Limit: 512 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 mkp make_pair
#define mems(a, x) memset((a), (x), sizeof(a))

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

const int maxn = (1 << 17) + 50;

ll n, m, K, S, f[maxn], a[maxn];
bool vis[maxn], g[maxn][18][18];
vector<pii> G[maxn];

struct node {
	ll u, d;
	node(ll a = 0, ll b = 0) : u(a), d(b) {}
};

inline bool operator < (const node &a, const node &b) {
	return a.d > b.d;
}

struct wwh {
	int u, i, j;
	wwh(int a = 0, int b = 0, int c = 0) : u(a), i(b), j(c) {}
};

void solve() {
	scanf("%lld%lld%lld", &K, &m, &S);
	n = (1 << K);
	for (int i = 1; i <= K; ++i) {
		scanf("%lld", &a[i]);
	}
	while (m--) {
		ll u, v, d;
		scanf("%lld%lld%lld", &u, &v, &d);
		G[u].pb(v, d);
		G[v].pb(u, d);
	}
	mems(f, 0x3f);
	f[S] = 0;
	priority_queue<node> pq;
	pq.emplace(S, 0);
	while (pq.size()) {
		int u = pq.top().u;
		pq.pop();
		if (vis[u]) {
			continue;
		}
		vis[u] = 1;
		for (pii p : G[u]) {
			ll v = p.fst, d = p.scd;
			if (f[v] > f[u] + d) {
				f[v] = f[u] + d;
				if (!vis[v]) {
					pq.emplace(v, f[v]);
				}
			}
		}
		queue<wwh> q;
		q.emplace(u, 0, 0);
		g[u][0][0] = 1;
		while (q.size()) {
			int v = q.front().u, i = q.front().i, j = q.front().j;
			q.pop();
			if (i == K && f[v] > f[u] + a[j]) {
				f[v] = f[u] + a[j];
				pq.emplace(v, f[v]);
			}
			if (i < K) {
				if (!g[v][i + 1][j]) {
					g[v][i + 1][j] = 1;
					q.emplace(v, i + 1, j);
				}
				if (!g[v ^ (1 << i)][i + 1][j + 1]) {
					g[v ^ (1 << i)][i + 1][j + 1] = 1;
					q.emplace(v ^ (1 << i), i + 1, j + 1);
				}
			}
		}
	}
	for (int i = 0; i < n; ++i) {
		printf("%lld%c", f[i], " \n"[i == n - 1]);
	}
}

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

标签:决赛,typedef,pq,emplace,THUPC,int,ll,long,2023
From: https://www.cnblogs.com/zltzlt-blog/p/17903156.html

相关文章

  • PTA-2023第十三次练习题目题解
    PTA-2023第十三次练习题目题解以下代码已做防抄袭处理,切勿抄袭。注意:手机端因为屏幕限制,代码会有(不希望的)换行。解决方案:1.建议使用电脑端打开。2.点击代码进入全屏观看。6-25实验9_5_反向打印字符串思路就是每次先找到字符串的最后一位,然后输出这一位,输出之后将这一位改为‘......
  • #8 2023.12.11
    453.THUPC2023Mputs("kejie");J每个点可能的值是个区间,首先是儿子的极值,如果某个极值有大于一个,就会让极值加一。Hsolve(l,r,c) link([l,mid],[mid+1,r],c) solve(l,mid,c+1) solve(mid+1,r,c+1)这样同一个颜色就只有偶环,D分母不太大,直接枚举就行了。A路径不会......
  • 华秋DFM荣获第三届智能制造创新大赛全国总决赛-新技术应用赛道三等奖
     近日,第三届智能制造创新大赛颁奖仪式在2023世界智能制造大会开幕式上隆重举行。华秋DFM_PCB可制造性设计分析软件凭借其出色的技术创新能力和在智能制造领域的卓越表现,荣获了新技术应用赛道三等奖。这是对华秋DFM在智能制造领域所做出的努力和成果的肯定,也是对其在推动智能制......
  • 荣誉见证|亚数成功入围2023年“中知路”长三角高价值专利运营大赛复赛百强榜
    近期,为推进知识产权强市建设纲要和“十四五”规划实施,国家知识产权国际运营(上海)平台、上海知识产权交易中心有限公司联合多省产权交易中心公司作为共同主办单位,以知识产权高质量发展全力支撑长三角经济社会高质量发展为主题,以高价值专利培育和运营为切入点,联合举办了“中知路”长三......
  • 2023-12-15 保存文件会生成一个dist包 ==》编译器配置冲突问题
    如题,每次保存文件都会生成个dist包,这个包有时候后会阻碍程序运行,所以必须要解决!在一番排查下,发现是编译器的问题,我原来用的是vscode,换成hbuildex后就不会生成了,我之前还怀疑是终端的问题,然后我在vscode保存文件,用其它终端(powershell)运行项目,结果还是生成了dist包,所以可以确定是v......
  • 华秋荣获亿邦动力2023产业互联网千峰奖,引领电子产业数字化变革
    喜讯!继华秋荣获2023中国产业数字化百强榜企业2023深圳行业领袖企业100强后华秋再次荣获亿邦动力2023产业互联网“千峰奖·数字供应链 12月1日晚,在2023亿邦产业互联网年会千峰之夜颁奖晚宴上,在一百余位产业互联网企业决策人、投资人及业界人士的共同见证下,2023产业互联网千......
  • 【2023-12-14】努力就好
    20:00有时候你能听到雪在下,如果你安静下来,心无杂念,跟自己以及一切都毫无怨艾,你就能躺在黑暗中听到下雪。                                                 ——雷蒙德·......
  • 202312142321_《遍历 for customised data structure 》
    functioncalculateAssembledSetsAndReturnSkus(suitComponents,inventory){letcomponentCount={};letminComponent={};letresult={};//CountcomponentsinsuitComponentsObject.entries(suitComponents).forEach(([_,components])......
  • 《2023-2024-1 20232427《网络空间安全导论》第六周学习总结》
    《2023-2024-120232427《网络空间安全导论》第六周学习总结》教学学习内容总结6.1应用安全概述在各类应用服务系统中,身份认证是保障应用安全的基础,其不仅包括传统的人的身份认还,设备.软件等网络实体都需要身份认证和可信管理,不同场所不同约束条件下需要采用多种多样的身份认......
  • 20231214
    件需求与分析课堂测试十——综合案例分析(5分) 班级:信2105-2  学号:20213866   姓名:吕晓彤根据下列案例需求描述,回答相关问题:有一个对外营业的会议中心,有各种不同规格的会议室,为用户提供以下服务:1、用户可以按照会议人数、会议时间预订会议室。可以只预订1次,也可预订定期......