Loj#3320-「CCO 2020」旅行商问题

正题

题目链接:https://loj.ac/p/3320


题目大意

有一张nnn个点的无向完全图,每一条边是红色或者蓝色,对于每个点sss求从这个点出发的一条尽量短的经过所有点的路径。

1≤n≤20001\leq n\leq 20001n2000


解题思路

显然地猜测一下最短的长度肯定是nnn,说是找一条路径,实际上我们是能够找到一个颜色交替只有一次的环的,然后交替位置就在sss的旁边。

我们构造一下,此时有两条不相交的路径s→x,t→ys\rightarrow x,t\rightarrow ysx,ty,并且两条路径上颜色都相同,一条红色一条蓝色。

我们假设s→xs\rightarrow xsx的路径是红色,此时对于一个未加入的点zzz,如果(x,z)(x,z)(x,z)是红色或者(y,z)(y,z)(y,z)是蓝色那么直接加长路径即可。

否则也就是说(x,z)(x,z)(x,z)是蓝色且(y,z)(y,z)(y,z)是红色,我们考虑(x,y)(x,y)(x,y)之间的路径颜色,假设是红色,那么如图
在这里插入图片描述
我们将yyy弹出路径t→yt\rightarrow yty,然后加入s→xs\rightarrow xsx后就可以再加入zzz了。

如果是蓝色同理弹另一边。

但是此时会出现两种情况:

  • 蓝色路径弹出后为空了,那么此时我们再找一个新的点当做新的ttt即可,反正我们的要求是sss不变。
  • 红色路径弹出后为空了,那么此时我们将zzz作为新的ttt,然后原本的s→ts\rightarrow tst路径变为s→xs\rightarrow xsx路径。

时间复杂度:O(n2)O(n^2)O(n2)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int N=2100;
int n,G[N][N];
char s[N];
vector<int>l,r;
int main()
{scanf("%d",&n);if(n==2){printf("2\n1 2\n2\n2 1\n");return 0;}for(int i=2;i<=n;i++){scanf("%s",s+1);for(int j=1;j<i;j++)G[i][j]=G[j][i]=(s[j]=='R');}for(int s=1;s<=n;s++){int z=s%n+1,g=0;l.clear();r.clear();l.push_back(z);r.push_back(s);g=G[s][z%n+1];for(int x=z%n+1;x!=s;x=x%n+1){if(G[r[r.size()-1]][x]==g)r.push_back(x);else if(G[l[l.size()-1]][x]==!g)l.push_back(x);else{if(G[l[l.size()-1]][r[r.size()-1]]==g){r.push_back(l[l.size()-1]);r.push_back(x);l.pop_back();if(!l.size()){x=x%n+1;if(x==s)break;l.push_back(z=x);}}else{l.push_back(r[r.size()-1]);l.push_back(x);r.pop_back();if(!r.size()){l.pop_back();l.swap(r);l.push_back(x);z=x;g=!g;}}}}printf("%d\n",n);for(int i=0;i<r.size();i++)printf("%d ",r[i]);for(int i=l.size()-1;i>=0;i--)printf("%d ",l[i]);putchar('\n');}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AcWing 1087. 修剪草坪28

AcWing 1087. 修剪草坪 题意: 有n个数&#xff0c;不能选超过连续的k个数&#xff0c;问所能选的最大值是多少&#xff1f; 题解&#xff1a; 我们首先分析dp过程&#xff1a; dp[i]表示选择完前i个数的最大值 sum[i]表示前i项和 对于第i个数&#xff0c;它有两个情况&#…

洛谷P4463:calc(dp、拉格朗日插值)

Solution\text{Solution}Solution 神奇题目。 首先可以强制所有的数递增&#xff0c;最后的答案乘一个 n!n!n! 即可。 设 dpi,jdp_{i,j}dpi,j​ 表示在 [1,j][1,j][1,j] 的值域选了 iii 个数的答案&#xff0c;不难写出 dp 转移&#xff1a; dpi,jdpi−1,j−1jdpi,j−1dp_{i,j…

CF1710C-XOR Triangle【dp】

正题 题目链接:https://www.luogu.com.cn/problem/CF1710C 题目大意 求有多少对0≤a,b,c≤n0\leq a,b,c\leq n0≤a,b,c≤n满足axorb,axorc,bxorca\ xor\ b,a\ xor\ c,b\ xor\ ca xor b,a xor c,b xor c作为边长时能构成一个非退化三角形。 n以二进制形式给出 1≤n<221051…

工业通信的开源项目 HslCommunication 介绍

前言&#xff1a;本项目的孵化说来也是机缘巧合的事&#xff0c;本人于13年大学毕业后去了一家大型的国企工作&#xff0c;慢慢的走上了工业软件&#xff0c;上位机软件开发的道路。于14年正式开发基于windows的软件&#xff0c;当时可选的技术栈就是MFC和C#的winform&#xff…

【地狱副本】数据结构之线段树Ⅲ——区间最值/赋值/修改/历史值操作(HDU5306,Tyvj 1518,【清华集训2015】V,HDU6315,HDU1828,POJ3162)

文章目录Gorgeous SequenceTyvj 1518 CPU监控【清华集训2015】VNaive OperationsPictureWalking RaceGorgeous Sequence HDU5306 操作 区间与xxx取min\rm minmin查询区间最大值查询区间和 比较暴力的线段树维护区间 Max : 区间最大值sub_max : 严格小于最大值的区间次大值…

Acwing 1089. 烽火传递

Acwing 1089. 烽火传递 题意&#xff1a; 有n个数&#xff0c;要保证每m个数中必须选一个&#xff0c;问所选数的最小总和是多少 题解&#xff1a; 我一开始设的状态为:dp[i]表示前i个数选完的最小值&#xff0c;第i个数可以选也可以不选&#xff0c;但是这样一个状态&…

CF886E Maximum Element(dp、组合数学)

Solution\text{Solution}Solution 纯纯的dp题。 关键在于我们 dp 时只关注不同元素之间的相对大小。 非法情况不易统计&#xff0c;考虑转而考虑合法情况再用全排列减。 设计 fif_ifi​ 为长度为 iii 的排列循环到一直最后也没有跳出的方案数。 枚举最大的元素 iii 放置的位置…

IIS作为ASP.NET Core2.1 反向代理服务器未说的秘密

--以下内容针对 ASP.NET Core2.1&#xff0c;2.2出现IIS进程内寄宿 暂不展开讨论---相比ASP.NET&#xff0c;出现了3个新的组件:ASP.NET Core Module、Kestrel、dotnet.exe&#xff0c; 后面我们会理清楚这三个组件的作用和组件之间的交互原理。 ASP.NET Core 设计的初衷是开源…

CF1710B-Rain【堆】

正题 题目链接:https://www.luogu.com.cn/problem/CF1710B 题目大意 一个数轴&#xff0c;每个位置上开始时都有一个ax0a_x0ax​0&#xff0c;nnn次操作pi,hip_i,h_ipi​,hi​对于所有位置axa_xax​令其变为axmax⁡(hi−abs(pi−x),0)a_x\max(h_i-abs(p_i-x),0)ax​max(hi​−…

数据结构之线段树Ⅴ——(李超线段树)Robot,Product Sum,Building Bridges,Jump mission

文章目录RobotProduct SumBuilding BridgesJump missionRobot BZOJ3938 机器人每次一旦改变速度&#xff0c;直到下一次改变速度为止 这一时间段内机器人的位置下标可以用一次函数表示 如果知道时刻t1t_1t1​即将改变速度的机器人位置&#xff0c;以及最近的下一次机器人速…

模板:拉格朗日插值(多项式)

所谓拉格朗日插值&#xff0c;就是在“拉格朗日”进行的一项民俗活动。拉格朗日通常在每年2月的第82个星期三。 &#xff08;逃&#xff09; 前言 非常强大的算法。 当可以证明某个函数是一个 kkk 次多项式时&#xff0c;我们就可以插入 k1k1k1 个函数值并快速的求出我们要求…

程序员修神之路--分布式缓存的一条明路(附代码)

菜菜呀&#xff0c;由于公司业务不断扩大&#xff0c;线上分布式缓存服务器扛不住了呀程序员主力 Y总如果加硬件能解决的问题&#xff0c;那就不需要修改程序菜菜我是想加服务器来解决这个问题&#xff0c;但是有个问题呀程序员主力 Y总&#xff1f;&#xff1f;&#xff1f;菜…

2019 ICPC Asia Nanjing Regional

题号题目难度知识点AA Hard Problem签到题思维题BChessboardCDigital Path签到题dfs记忆化搜索DHolesEObservationFPaper GradingGPoker GameHPrince and Princess四稳铜快银思维题ISpace StationJSpyKTriangle三题快铜计算几何

uoj#751-[UNR #6]神隐【交互】

正题 题目链接:https://uoj.ac/problem/751 题目大意 有一棵nnn个点的树&#xff0c;你每次可以选择一个边集&#xff0c;交互库会返回你所有联通块&#xff0c;要求这棵树。 n≤2000n\leq 2000n≤2000&#xff0c;操作次数不超过141414。 或 n≤131072n\leq 131072n≤131072…

模板:快速莫比乌斯变换(FMT)+快速沃尔什变换(FWT)(多项式)

文章目录前言解析OR定义变换&#xff1a;逆变换代码AND代码XOR定义变换逆变换代码所谓快速沃尔什变换&#xff0c;就是快速的沃尔玛什锦专柜变换 &#xff08;逃&#xff09; 前言 正常卷积的定义&#xff1a;ck∑ijkaibjc_k\sum_{ijk}a_ib_jck​∑ijk​ai​bj​。 可以用FFT…

[AtCoder Beginner Contest 216] 题解

文章目录A - Signed DifficultyB - Same NameC - Many BallsD - Pair of BallsE - Amusement ParkF - Max Sum CountingG - 01Sequence比赛链接A - Signed Difficulty 签到题 #include <cstdio> int x, y; char c; int main() {scanf( "%d%c%d", &x, &am…

长沙.NET技术社区正式成立

感谢大家的关注&#xff0c;请允许我冒昧的向大家汇报长沙.NET技术社区第一次交流会的会议进展情况。活动过程汇报2019年2月17日&#xff0c;继深圳&#xff0c;广州&#xff0c;西安&#xff0c;成都&#xff0c;苏州相继成立了.net社区之后&#xff0c;酝酿已久的长沙.net社区…

A Hard Problem

A Hard Problem 题意&#xff1a; 给定一个n&#xff0c;要求找到最小的正数k&#xff0c;使得在集合T中任意选K个数&#xff0c;其中存在两个不同的u和v&#xff0c;u是v的因子 题解&#xff1a; 一开始想偏了&#xff0c;往质因数方向想了&#xff0c;然后因为1e9的以内的…

hdu7207-Find different【burnside引理】

正题 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid7207 题目大意 一个序列aaa&#xff0c;和它相同的序列当且仅当能通过以下操作实现相同&#xff1a; 将a1a_1a1​丢到ana_nan​&#xff0c;其余的向前移动一位。令所有ai(ai1)%ma_i(a_i1)\%mai​(ai​1)%m 对于n…

洛谷P6097:【模板】子集卷积(FWT)

解析 完全可以当一道 DP 题而不是模板来做。 首先第一个条件&#xff1a; i∣jki|jki∣jk 比较简单&#xff0c;直接上FWT板子即可。 考虑第二个条件&#xff1a;i&j0i\&j0i&j0。若设 ∣x∣|x|∣x∣ 表示二进制下 1 的个数&#xff0c;那么就有&#xff1a; ∣i∣…