首页 > 其他分享 >QOJ 4996 Icy Itinerary

QOJ 4996 Icy Itinerary

时间:2024-01-21 10:44:07浏览次数:28  
标签:连边 lb la int 4996 ++ Icy -- QOJ

先转化题目条件。
发现把 \(n\) 个点划分为 \(2\) 个点集,满足其中一个点集存在哈密顿路,另一个点集在补图中存在哈密顿路和原问题是等价的。
令直接存在哈密顿路的点集为 \(X\),其路径端点分别为 \(S_X, T_X\);补图中存在哈密顿路的点集为 \(Y\),路径端点分别为 \(S_Y, T_Y\);
考虑 \(T_X\) 和 \(T_Y\) 是否有连边,有那就相当于是在 \(T_Y\) 这里进行了切换;否则就是在 \(T_X\) 这里进行了切换,所以和原问题等价。

考虑增量法求出 \(X, Y\),当前加入了点 \(u\) 会有什么变化。
若 \(T_X, u\) 有连边,则 \(u\) 可以直接放进 \(X\) 里并作为新的 \(T_X\)。
同理,若 \(T_Y, u\) 没有连边,则 \(u\) 可以直接放进 \(Y\) 里并作为新的 \(T_y\)。
否则即 \(T_X, u\) 没有连边,\(T_Y, u\) 有连边时,考虑 \(T_X, T_Y\) 的连边关系。
若 \(T_X, T_Y\) 有连边,则 \(T_X \to T_Y \to u\) 都有连边,把 \(T_Y, u\) 放进 \(X\) 更新 \(T_X\) 即可。
同理若没有连边,则 \(T_Y\to T_X\to u\) 都没有连边,把 \(T_X, u\) 放进 \(Y\) 更新 \(T_Y\) 即可。

限制了路径的起点必须是 \(1\)。
考虑新加入的点 \(u\) 加入后肯定会是某一个集合的 \(T\)。
于是考虑倒序加点,哪部分 \(T = 1\) 就先走这部分,这部分从 \(T\) 走到 \(S\) 即可,因为 \(S, T\) 两者交换必然是不会影响的,毕竟是无向边。

map 存边,时间复杂度 \(O(n\log n)\)。

#include<bits/stdc++.h>
const int maxn = 3e5 + 10;
std::map<std::pair<int, int>, bool> E;
int a[maxn], la, b[maxn], lb;
int main() {
	int n, m; scanf("%d%d", &n, &m);
	for (int i = 1; i <= m; i++) {
		int x, y; scanf("%d%d", &x, &y);
		E[{x, y}] = E[{y, x}] = 1;
	}
	for (int i = n; i >= 1; i--)
		if (! la || E[{i, a[la]}]) a[++la] = i;
		else if (! lb || ! E[{i, b[lb]}]) b[++lb] = i;
		else if (E[{a[la], b[lb]}]) a[++la] = b[lb--], a[++la] = i;
		else b[++lb] = a[la--], b[++lb] = i;
	if (b[lb] == 1) std::swap(a, b), std::swap(la, lb);
	for (int i = la; i; i--) printf("%d ", a[i]);
	for (int i = lb; i; i--) printf("%d ", b[i]);
	return 0;
}

标签:连边,lb,la,int,4996,++,Icy,--,QOJ
From: https://www.cnblogs.com/lhzawa/p/17977596

相关文章

  • G. Bicycles
    原题链接题记,一道思考加编写加优化耗时2h的题1.核心:抵达终点的路途中,如果换自行车,一定是换一辆速度系数更小的车2.从速度系数最小的城市出发,到达终点的cost等于其系数乘上到达终点的最小距离3.从速度系数第二小的城市出发,到达终点的最小值一定是直接往终点走和先去速度系数最......
  • MySQL修改安全策略时报错:ERROR 1193 (HY000): Unknown system variable ‘validate_pa
    我使用的版本是MySQL5.73,环境是LinuxCentOS7,其他版本不知道是否可行,望谅解。当我们想设置简单的密码的时候,看了别人发的如何修改安全策略的代码,如下:setglobalvalidate_password_policy=0;setglobalvalidate_password_length=1;但是当我们使用的时候,却报了这样一个......
  • 4.k8s-配置网络策略 NetworkPolicy
    一、基本了解官方文档:https://kubernetes.io/zh-cn/docs/concepts/services-networking/network-policies/基本了解:1.网络策略通过网络插件来实现,创建一个NetworkPolicy资源对象而没有控制器来使它生效的话,是没有任何作用的,而我们搭建K8s集群时安装的calico网络组件就支持网......
  • Proximal Policy Optimization (PPO): A Robust and Efficient RL Algorithm
    1.背景介绍ProximalPolicyOptimization(PPO)是一种强化学习(ReinforcementLearning,RL)算法,它在许多实际应用中表现出色,具有较强的鲁棒性和效率。在这篇文章中,我们将详细介绍PPO的核心概念、算法原理、具体实现以及潜在的未来趋势和挑战。1.1强化学习简介强化学习是一种......
  • ACL/IP-PREFIX +ROUTE-POLICY
    1、实验拓扑图2、实验目的测试“全允许则允许,有拒绝则拒绝”3、实验步骤3.1访问控制列表aclnumber2000rule5permitsource3.3.3.30.0.0.03.2配置路由策略route-policyp1permitnode10if-matchacl20003.3调用路由策略ospf100//进入进程模式import-routeisis200ty......
  • G. Bicycles 分层图单源最短路
    题目链接简单描述一下题意:给定n个点,m条带权无向边,每个点i有一辆速度系数为Si的自行车。每经过一个点即可拥有该点的自行车,在任意两点之间路过的消耗为:已经拥有的某辆自行车的速度Si*边权Wi,求从1号点到n号点的最小消耗。思路:因为需要求的是最小的总消耗,所以在某个点出发时,我......
  • Traffic-policy
    1、实验拓扑图2、实验目标策略路由可以设置如下参数:限速(car SpecifyCAR(CommittedAccessRate)feature)、下一跳路由(redirect Redirectpackets)、优先级、队列(queue  Specifyqueuefeature)等待,可以根据需求来规划和配置网络带宽资源3、实验配置3.1定义感应兴趣流(只能使......
  • G. Bicycles
    G.BicyclesAllofSlavic'sfriendsareplanningtotravelfromtheplacewheretheylivetoapartyusingtheirbikes.AndtheyallhaveabikeexceptSlavic.Thereare$n$citiesthroughwhichtheycantravel.Theyallliveinthecity$1$andwant......
  • LOJ-3033/QOJ-4896/南外集训 2023.12.26 T3 Alice、Bob 与 DFS
    恶魔的低语,会送来天堂的福音。题意有一个\(n\)个点的有向无环图,第\(i\)(\(1\lei\len\))个点有mi条有序的出边\(e_{i,1},e_{i,2},...,e_{i,m_i}\)。每个点要么是黑点,要么是白点。有\(k\)个程序,第\(i\)个程序形如从\(r_i\)开始,对\(r_i\)的直接或间接后继......
  • QOJ 7943 LIS on Grid
    QOJ传送门好题。首先可以视为每一列\(1\)的个数\(\gea_i\),超出的最后再无视即可。首先先不考虑构造。考虑二分\(k\),考虑Dilworth定理,即询问是否有\(k\)条链覆盖所有的黑格。可以调整使得第\(i\)条链的起点为\((n-k+i,1)\),终点为\((i,m)\)。那么一条链往......