401640164016: 辉夜的夜空明珠
时间限制: 1.5Sec1.5 Sec1.5Sec 内存限制: 512MB512 MB512MB

题目描述
整个回廊可以看作一个nnn 个点mmm 条边的无向图,每条边走动花费的时间为111。辉夜、永琳、铃仙、因幡帝等kkk 个人或兔子可以通过传送阵分别进入这个图上的k 个特殊的点,然后去寻找闯入者。但是在寻找闯入者之前,他们要聚集到一个点,以增强战斗力。注意,可以先到的人停下不走等后来的人。

闯入者不知道回廊的规则,因此被困住,对辉夜等k 个人的行动没有影响。而辉夜等k个人必须按照回廊的规则走动。

回廊的规则如下:每个点有一个颜色,一共444 种颜色,红、蓝、黄、绿,分别以R、B、Y、GR、B、Y、GR、B、Y、G 表示。走动时必须在第4p+14p+14p+1 步到4p+44p+44p+4 步的时候走四种不同的颜色,当然最后一个不完整的周期内也不能走动相同颜色。注意,起点算第111 步。

现在给定kkk 个起点,辉夜想知道他们最短多长时间能够汇合,若不能汇合输出−1-1−1。

输入
第一行一个CaseCaseCase,表示测试点编号。

第二行两个数nnn 和mmm,表示图有nnn 个点mmm 条边。

第三行一个kkk,表示有kkk 个人。

第四行kkk 个数,表示kkk 个入口的编号。

第五行一个长度为nnn 的字符串,仅包含RBYGRBYGRBYG,表示nnn 个点的颜色。

下面 mmm 行每行两个数,ui,viu_{i},v_{i}ui​,vi​,表示第 iii 条边连接了uiu_{i}ui​和viv_{i}vi​。

输出
一个数表示最短汇合时间,不能汇合输出−1-1−1。

样例输入
1
5 4
4
1 2 3 4
RRRRG
1 5
2 5
3 5
4 5
样例输出
1

提示

数据范围
对于100%100\%100%的数据,保证k≥2,n≤50000,m≤200000,k≤10k\geq2,n≤50000,m≤200000,k≤10k≥2,n≤50000,m≤200000,k≤10。

题解:
看到kkk这么小。。。我就想到可能需要状压kkk。。。
但事实上不需要。
求出从这kkk个点出发,到每个点的最短路,并且带着颜色的状态跑。
bfsbfsbfs即可。
然后算出每个点到这kkk个出发点的最大值的最小值即可。

#include<bits/stdc++.h>
using namespace std;
#define in inline
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define repd(i,a,b) for(int i=a;i>=b;i--)
#define For(i,a,b) for(int i=a;i<b;i++)
#define _(d) while(d(isdigit(ch=getchar())))
template<class T>in void g(T&t){T x,f=1;char ch;_(!)ch=='-'?f=-1:f;x=ch-48;_()x=x*10+ch-48;t=f*x;}
const int N=5e4+3,M=200004;
struct E{int to,nxt;
}e[M<<1];
int head[N],tot,n,m,k,p[N],c[N];
in void ins(int x,int y){e[++tot]={y,head[x]};head[x]=tot;
}
typedef pair<int,int>P;
#define mk(a,b) make_pair(a,b)
#define fi first
#define se second
int d[15][17][N];int b[N],pp[N],inf;bool vis[N];
typedef long long ll;
in void spfa(int id,int st){queue<P>q;q.push(mk(st,1<<c[st]));d[id][1<<c[st]][st]=0;while(!q.empty()){P now=q.front();q.pop();int x=now.fi;//cout<<now.se<<endl;for(int i=head[x];i;i=e[i].nxt){//cout<<(now.se&(1<<c[e[i].to]))<<endl;if(now.se&(1<<c[e[i].to])){//puts("orzlkw");continue;} int S=now.se|(1<<c[e[i].to]);S%=15;if(d[id][S][e[i].to]>d[id][now.se][x]+1){d[id][S][e[i].to]=d[id][now.se][x]+1;q.push(mk(e[i].to,S));}}}
}
char ch[N];
int main(){//freopen(".in","r",stdin);freopen(".out","w",stdout);g(n),g(n),g(m);g(k);rep(i,1,k) g(p[i]),pp[p[i]]=i;scanf("%s",ch+1);rep(i,1,n){if(ch[i]=='R') c[i]=0;if(ch[i]=='B') c[i]=1;if(ch[i]=='Y') c[i]=2;if(ch[i]=='G') c[i]=3;}memset(d,0x3f,sizeof(d)),inf=d[1][1][1];rep(i,1,m){int x,y;g(x),g(y);ins(x,y);ins(y,x);}rep(i,1,k) spfa(i,p[i]);int ans=inf;rep(i,1,n){int t1=0;rep(j,1,k){int tmp=inf;rep(l,0,16){tmp=min(tmp,d[j][l][i]);}//cout<<tmp<<endl;t1=max(t1,tmp);//cout<<t1<<endl;}ans=min(ans,t1);}printf("%d\n",ans);return 0;
}

4016: 辉夜的夜空明珠相关推荐

  1. 4016: 辉夜的夜空明珠(moon)

    题目描述 整个回廊可以看作一个n 个点m 条边的无向图,每条边走动花费的时间为1.辉夜.永琳.铃仙.因幡帝等k 个人或兔子可以通过传送阵分别进入这个图上的k 个特殊的点,然后去寻找闯入者.但是在寻找闯 ...

  2. 题解 DTOJ #4016.辉夜的夜空明珠(moon)

    欢迎访问 My Luogu Space. [题目大意] 一张无向图,边的长度都为 111,每个点被染成了 "R,B,Y,G""R,B,Y,G""R,B ...

  3. 【8.12测试】辉夜的见面礼

    辉夜的见面礼 [题目背景] 可爱的辉夜看着你认真地学了一堆算法,不希望你一题也不会做.她通过收买出题人,将一道水题放到前面,并且将 noip 模拟赛 改成了 GDSOI 模拟赛. [问题描述] 辉夜是 ...

  4. 【烂活】斯坦福句法解析库使用小结+最新四月新番下载(以辉夜与阿尼亚为例)

    序言 前排提示本文是挂羊头卖狗肉,正文在第二部分,第一部分纯属为了过审凑字数. 文章目录 序言 1 斯坦福句法解析库(句法树.依存关系图)使用概述 2 烂活(可能对追番的朋友有用) 1 斯坦福句法解析 ...

  5. C语言之辉夜纪——巨龙陨落

    题目描述 巨龙是世界上最古老的生物之一,他们在黑暗笼罩,光明还未到来之前就已存在于世.生活在大陆上的人们也早已记不得他们遇到的第一只巨龙是谁.龙族是强大好战的生物,他们中最年长最强大的龙被称作斯拉瑞克 ...

  6. Attention Points

    Attention Points 数组范围 无向图.树,边表的范围是边数的两倍. 因为最近树的题目做的比较多,一定要注意分清是树还是图,不能冲上去就去开struct Edge{int to,ne,w; ...

  7. Noip 模拟 13 2018/10/31

    T1:铃仙的红色之瞳(eyes) 为了方便你的预测,铃仙对该符卡进行了改造. 敌方非常强大,可以看作有无限的体力.通过该符卡,铃仙可以释放出子弹,敌方触碰到子弹就会损失一格体力.注意,每次敌方损失体力 ...

  8. 董明珠的权力危机:半年两位元老出局,格力进入动荡时刻

    本文转载自 紫财经 高瓴资本完成15%股权过户一周年刚过去10天,近日,格力电器又爆重磅消息,二把手.执行总裁兼董事黄辉挂冠而去.资本搅动一池春水后,格力进入多事之秋,董明珠的铁王座迎来了史上最严峻的 ...

  9. 洞房花烛夜山西人必喝的和气拌汤——西红柿鸡蛋拌汤

    每到天气冷的时候,身体感冒不适的时候,我的胃就开始想念老家的拌汤了.一碗拌汤喝下去,暖心又暖胃,整个身体都感觉轻快了许多,感冒的症状也立马好了!  "拌汤"俗称又叫疙瘩汤,是流行于 ...

最新文章

  1. 迅雷“星域”打通最后一公里重新定义CDN
  2. 基于Java的RDMA高性能通信库(四):DaRPC
  3. Android7.1去掉USB权限弹窗
  4. Blocks与Dispatch Queue的使用
  5. 第二天:Swift手势操控弹性按钮
  6. 线程池拒绝策略 开发中常用什么策略_面试官:说说你知道多少种线程池拒绝策略...
  7. C# 查询集合中某个元素里的值
  8. nodejs中art-template模板语法冲突解决方案
  9. Windows网络编程之recv()函数
  10. 大学计算机实践教程raptor,大学计算机实践教程.docx
  11. java调用opencc进行中文简体繁体转换
  12. Postek博思得打印机
  13. 在 Vue3 成为默认版本后,盘点了 Vue3 与 Vue2 的区别
  14. c语言栈的实现和表示
  15. 【如何开发小程序】自己如何开发小程序?
  16. Flex布局常见父项属性(一)- flex-direction
  17. 2021年网络规划设计师论文真题
  18. 小米扫地机器人粉尘盒_【小米 米家 扫地机器人开箱展示】开关|上盖|集尘盒_摘要频道_什么值得买...
  19. python一组数字按大到小输出_Python练习题 005:三个数字由大到小排序输出
  20. 探索全新时代的数字艺术市场!了解NFT数字藏品交易平台的运作!

热门文章

  1. 蓝牙BQB认证 Profile测试
  2. css篇-盒子模型理解
  3. Mongo入门-2-基本操作
  4. python+selenium+pycharm自动化测试环境搭建
  5. VS生成的exe文件发给别人打不开的问题
  6. pandas 转换为文本类型_python – pandas将文本特征转换为数值
  7. 微信点击链接跳转到微信公众号关注页、微信关注链接
  8. 世界坐标系(WCS)和用户坐标系UCS
  9. Docker容器之搭建本地私有仓库
  10. 你轻轻哼唱一句,都是最美的一首歌