题意:在一条数轴上有若干'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. HDU3430 (置换群循环节+中国剩余定理)

    题意:给出n张牌,标号为1-n,然后给出两个序列,序列1表示序列1,2,3,4……,n洗一次牌后到达的,序列2表示目标序列,问初始序列按序列1的洗牌方式洗几次能到达序列2的情况,如果不能到达输出-1. ...

  2. FatMouse's Speed--hdu1160(dp+输出路径)

    Problem Description FatMouse believes that the fatter a mouse is, the faster it runs. To disprove th ...

  3. Unique Binary Search Trees(dp)

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  4. 2017CodeM复赛

    A.配对游戏(loj6191) 题目: https://loj.ac/problem/6191 分析: g[i][j]表示前i个位置尽可能合并,合并到最后右边剩下j个>,这样情况的概率 那么g[ ...

  5. Spring MVC表单实例

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/mvc-framework/spring-mvc-form-handling-example.htm ...

  6. HDTVI,HDCVI

    HDTVI是海康的同轴高清标准,HDCVI是大华的同轴高清标准,二者互相不兼容.

  7. datasnap使用ipv6

    有些人说DATASNAP不支持IPv6,只支持IPv4. 这是不正确的. DATASNAP默认是使用IPv4在ipv6 环境下 怎样用datasnap?Params.Values['Communica ...

  8. 巧用Drawable 实现Android UI 元素间距效果

    源文地址: 巧用Drawable 实现Android UI 元素间距效果 在大部分的移动UI或者Web UI都是基于网格概念而设计的.这种网格一般都是有一些对其的方块组成,然后它们组合成为一个块.使用 ...

  9. [Zlib]_[0基础]_[使用zlib库压缩文件]

    场景: 1. WIndows上没找到系统提供的win32 api来生成zip压缩文件, 有知道的大牛麻烦留个言. 2. zlib比較经常使用,编译也方便,使用它来做压缩吧. MacOSX平台默认支持z ...

  10. 微软Build2016:Xamarin杂记

    去年的Build2015技术大会.留给人印象最深的莫过是Windows 10在手机端.PC端.Xbox等硬件平台上的大一统.还有非常具有科幻气质的HoloLens技术的各种展示.去年尽管也展示了Xam ...