题意:在一条数轴上有若干'R','B',‘G'点,连接两个点的代价是位置差,要求使用最小代价使得除去所有'R'点后剩下的所有点联通,除去所有'B'点后剩下的所有点联通。

还以为会是什么最小生成树,结果是脑洞题啊

因为G点总是要保留下来的,所以考虑按照G分成若干块,对于每个以G开头以G结尾的块,考虑如下两种操作:

1.分别依次连接 左G—中间所有的R—右G、左G—中间所有的B—右G,代价为 $ 2*len $

2.连接两端的G,再由两端的G依次分别连接中间的B和R,即,把两端的G和R、B分别依次连接,然后分别断掉最长的一段,代价为 $ 3*len-mxb-mxr $

对于每个区间分别求一下两个情况去min即可,复杂度 $ O(n) $

注意:

1.没有G的情况

2.一个区间内没有B或R的情况

#include<iostream>
#include<cstdio>
using namespace std;
const int N=300005;
int n,d[N],tot,ans;
char s[10];
struct qwe
{
int p;
char c;
}a[N];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%s",&a[i].p,s);
a[i].c=s[0];
if(s[0]=='G')
d[++tot]=i;
}
if(!tot)
d[1]=n+1;
for(int i=1;i<d[1];i++)
if(a[i].c=='R')
{
ans+=a[d[1]].p-a[i].p;
break;
}
for(int i=1;i<d[1];i++)
if(a[i].c=='B')
{
ans+=a[d[1]].p-a[i].p;
break;
}
for(int i=n;i>d[tot];i--)
if(a[i].c=='R')
{
ans+=a[i].p-a[d[tot]].p;
break;
}
for(int i=n;i>d[tot];i--)
if(a[i].c=='B')
{
ans+=a[i].p-a[d[tot]].p;
break;
}
for(int i=1;i<tot;i++)
{
int prr=a[d[i]].p,prb=a[d[i]].p,mxr=0,mxb=0,len=a[d[i+1]].p-a[d[i]].p;
for(int j=d[i]+1;j<d[i+1];j++)
if(a[j].c=='R')
{
mxr=max(mxr,a[j].p-prr);
prr=a[j].p;
}
for(int j=d[i]+1;j<d[i+1];j++)
if(a[j].c=='B')
{
mxb=max(mxb,a[j].p-prb);
prb=a[j].p;
}
if(prr!=a[d[i]].p)
mxr=max(mxr,a[d[i+1]].p-prr);
if(prb!=a[d[i]].p)
mxb=max(mxb,a[d[i+1]].p-prb);
ans+=min(2*len,(1+(mxb!=0)+(mxr!=0))*len-mxr-mxb);
}
cout<<ans<<endl;
return 0;
}

Codeforces 908F - New Year and Rainbow Roads 【脑洞】的更多相关文章

  1. Codeforces 908F New Year and Rainbow Roads

    New Year and Rainbow Roads 思路:我们考虑两个绿点之间的红点和蓝点, 首先把这些红点和蓝点接到绿点上面绝对不会超过绿点距离的两倍. 然后我们先把两个绿点连上, 再把绿点经过蓝 ...

  2. Codeforces Good Bye 2017 908F F. New Year and Rainbow Roads

    题 OvO http://codeforces.com/contest/908/problem/F CF 908F 解 需要注意细节的模拟题. 如果三种颜色都存在,则记每两个相邻的G组成一个段,对每个 ...

  3. Codeforces 629 E. Famil Door and Roads

    题目链接:http://codeforces.com/problemset/problem/629/E 询问这个简单环的期望.考虑将这个环拆成两部分. 令${deep[x]>=deep[y]}$ ...

  4. 【枚举】【DFS序】Gym - 101617G - Rainbow Roads

    题意:一颗树,每条边有个颜色,一条路径被定义为“彩虹”,当且仅当其上没有长度大于等于2的同色子路径.一个结点被定义为“超级结点”,当且仅当从其发出的所有路径都是“彩虹”. 枚举所有长度为2,且同色的路 ...

  5. Gym - 101615 D Rainbow Roads dfs序

    题目传送门 题目大意: 给出一颗树,每条边都有一个颜色,对一个点来说,如果其他所有点到这个点的简单路径,相连的边颜色都不同,这个点即合法点,统计所有的合法点. 思路: 对于一个节点来说 1.如果这个节 ...

  6. Gym-101615D Rainbow Roads 树的DFS序 差分数组

    题目链接:https://cn.vjudge.net/problem/Gym-101615D 题意 给一棵树,每个边权表示一种颜色. 现定义一条彩虹路是每个颜色不相邻的路. 一个好点是所有从该节点开始 ...

  7. [Codeforces]Good Bye 2017

    A - New Year and Counting Cards #pragma comment(linker, "/STACK:102400000,102400000") #inc ...

  8. 2017-2018 ACM-ICPC Pacific Northwest Regional Contest (Div. 1)

    A. Odd Palindrome 所有回文子串长度都是奇数等价于不存在长度为$2$的偶回文子串,即相邻两个字符都不同. #include<cstdio> #include<cstr ...

  9. 2017-2018 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) Solution

    A - Odd Palindrome 水. #include <bits/stdc++.h> using namespace std; #define N 110 char s[N]; i ...

随机推荐

  1. lombok注解简化实体类getting 和 setting 方法

    实体类注解,将以往的get/set方法简化为标签注解,让代码看着更简洁. Maven依赖: <dependency> <groupId>org.projectlombok< ...

  2. C#内存管理—职场生存的必修课

    前言 在职场中,确立自身的技术水平很重要,因为,如果你被标记成了技术菜鸟,那么你的工作一旦做快了,大家就会一致的认为这个任务比较简单:如果你未如期完成,则会被各种明嘲暗讽,你不但无法获得合理的表扬,还 ...

  3. spring mvc 集成freemarker模板

    主要使用到的jar 文件:spring mvc +freemarker.jar 第一步:spring mvc 集成 freemarker <!-- 定义跳转的文件的前后缀 ,视图模式配置--&g ...

  4. css中高度比img多出4px的问题

    一句话概括:为什么<a>标签比里面的img高度多出4px 的问题,主要还是由于 img是inline element, it's height is caculated different ...

  5. [TypeScript] Transform Existing Types Using Mapped Types in TypeScript

    Mapped types are a powerful and unique feature of TypeScript's type system. They allow you to create ...

  6. 改动Android启动画面

    一.Android的启动步骤 1.启动Linux 2.载入Android 3.显示Android桌面 二.分析 Android载入开机动画的源代码文件是: /opt/android4.3/framew ...

  7. Android +NDK+eclipse+opengl ES2.0 开启深度測试

    參考:https://www.opengl.org/discussion_boards/showthread.php/172736-OpenGL-ES-Depth-Buffer-Problem 环境: ...

  8. 游戏server设计的一些感悟

    Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn.net/chen19870707 Date:September 30 ...

  9. Node-webkit 介绍

    什么是Node-webkit ? Node-webkit 是Intelproject师rogerwang写的一个基于node.js和chromium的应用程序执行环境,通过node-webkit,我们 ...

  10. Apsara Clouder专项技能认证:实现调用API接口 (笔记)