题意:在一条数轴上有若干'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. bit manipulation

    WIKI Bit manipulation is the act of algorithmically manipulating bits or other pieces of data shorte ...

  2. 用Google Analytics UTM标注社会化媒体分享流量来源

    随着社会化媒体营销概念近两年的日益盛行,敢于吃螃蟹的营销工作者们展开了一些尝试,发现对社会化营销效果进行综合评估是一大难点,价值难以衡量.主要原因在于它的营销效果中混杂了直接的目标转化.品牌宣传.品牌 ...

  3. HDU 5695 Gym Class

    拓扑排序. #include<cstdio> #include <iostream> #include<cstring> #include<cmath> ...

  4. CodeForces 599C Day at the Beach

    预处理一下i到n的最小值. #include<cstdio> #include<cstring> #include<cmath> #include<algor ...

  5. 寒武纪camp网络测试赛

    寒武纪camp网络测试赛 地址:oj点我进入 A(树形dp+树链剖分) 题意: 分析: 考虑树形dp,f0(x)和f1(x)分别表示以x为根的子树,不取x点或取x点的最大合法子集的元素个数 那么对于一 ...

  6. codeforces 873F(后缀数组)

    题意 给一个长度不超过200000的字符串s,假定有一个字符串a,这个字符串在s中出现次数是f(a),你需要让$|a|f(a)$最大. 但是有一些位置是禁止的,即以该位置为结束位置的字符串不计数. 分 ...

  7. java基础语法4--封装,继承,多态

    学习路线: 未封装==>封装==>继承==>多态==>抽象类 首先还是那句话,万物皆对象,对象有行为和属性. 一:封装 1.封装的概念: 信息隐蔽和对象的属性及操作结合成一个独 ...

  8. Qt Quick 图像处理实例之美图秀秀(附源代码下载)

    在<Qt Quick 之 QML 与 C++ 混合编程具体解释>一文中我们解说了 QML 与 C++ 混合编程的方方面面的内容,这次我们通过一个图像处理应用.再来看一下 QML 与 C++ ...

  9. 深入源代码解析Android中的Handler,Message,MessageQueue,Looper

    本文主要是对Handler和消息循环的实现原理进行源代码分析.假设不熟悉Handler能够參见博文< Android中Handler的使用>,里面对Android为何以引入Handler机 ...

  10. XML转换为HTML

    from:http://www.w3school.com.cn/xml/xml_to_html.asp 在上一节中,我们讲解了如何通过 JavaScript 来解析 XML 并访问 DOM. 本例遍历 ...