题目链接

光坂小镇是一个由 n 个点(编号为 1 ~ n),m 条有向边构成的图,每个节点上都有一个光玉,光玉共有 k 种,编号为 0 ~ k−1。

为了使一切改变,朋也需要找齐全部的 k种光玉。他可以从任意一个节点出发,在图上任意行走,但不会经过同一个节点两次,每碰到一个光玉便会将其收集,收集到 k个光玉后,即经过了 k 个节点后,便不会继续收集。请设计一种方案,使得朋也能够收集全部的 k 种光玉,且走过的路径长度最短。

换句话说,每个点一个颜色,找到一条最短的点数为 k 、恰好经过全部 k种颜色的路径。你需要求出这条路径的长度。

大意:不解释

思路:由于n极小,k也小,考虑状压后迭代乱搞.设状态dis[i][j]表示终点为i状态为j的最小路径长,将每个点的初始态扔进队列里迭代更新即可.

代码:

#include <iostream>
#include <cstdio>
#include <memory.h>
#include <queue>
#define r(x) x=read()
#define MAXX 105
#define MAX(a,b) (a>b?a:b)
#define MIN(a,b) (a<b?a:b)
using namespace std;
typedef long long ll;
typedef pair<int,int> node;
int read()
{
char ch=;int w=,ff=;
while(ch<''||ch>''){if(ch=='-')ff=-;ch=getchar();}
while(ch>=''&&ch<=''){w=w*+ch-'';ch=getchar();}
return ff*w;
}
int h[MAXX],cnt;
struct edge{int to,nex,w;}e[];
void add(int u,int to,int w){e[++cnt]=(edge){to,h[u],w},h[u]=cnt;}
int map2[MAXX][<<],val[MAXX];
int dis[MAXX][<<],ans;
int n,m,k;
void spfa()
{
memset(dis,0x3f,sizeof(dis));
memset(map2,,sizeof(map2));
ans=dis[][];
int S=(<<k)-;
queue<node>que;
for(int i=;i<=n;++i){que.push(node(i,<<val[i])),dis[i][<<val[i]]=,map2[i][<<val[i]]=;}
while(!que.empty())
{
node p=que.front();que.pop();
map2[p.first][p.second]=;
for(int i=h[p.first];i;i=e[i].nex)
{
if((<<val[e[i].to])&p.second) continue;
int goal=(p.second|(<<val[e[i].to]));
if(dis[e[i].to][goal]>dis[p.first][p.second]+e[i].w)
{
dis[e[i].to][goal]=dis[p.first][p.second]+e[i].w;
if(!map2[e[i].to][goal])
map2[e[i].to][goal]=,que.push(node(e[i].to,goal));
}
}
}
for(int i=;i<=n;++i)
ans=MIN(dis[i][S],ans);
}
int u,to,w;
int main()
{
r(n),r(m),r(k);
for(int i=;i<=n;++i)
r(val[i]);
for(int i=;i<=m;++i)
r(u),r(to),r(w),add(u,to,w);
spfa();
if(ans!=dis[][]) printf("%d",ans);
else printf("Ushio!");
return ;
}

P4962 朋也与光玉题解的更多相关文章

  1. [洛谷P4962]朋也与光玉

    题目大意:有一张$n(n\leqslant100)$个点$m(m\leqslant n(n-1)$条边的有向图,每个点有一个颜色,需要找到一条长度为$k(k\leqslant13)$,恰好经过全部$k ...

  2. AtCoder Grand Contest

    一句话题解 QwQ主要是因为这篇文章写的有点长……有时候要找某一个题可能不是很好找,所以写了这个东西. 具体的题意.题解和代码可以再往下翻._(:з」∠)_ AGC 001 C:枚举中点/中边. D: ...

  3. BestCoder8 1002 Revenge of Nim(hdu 4994) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4994 题目意思:有 n 个 heap(假设从左至右编号为1-n),每个 heap 上有一些 objec ...

  4. 【Codeforces Round #431 (Div. 1) B】

    [链接]h在这里写链接 [题意] 场上有 n 个点,它们分别向上与向右在不同时刻开始运动,相遇则改变移动方向,求最终这些点到达的坐标. [题解] 先把每个点的坐标都往它本该移动的方向相反的方向退ti个 ...

  5. [leetcode] 106. Construct Binary Tree from Inorder and Postorder Traversal(medium)

    原题地址 思路: 和leetcode105题差不多,这道题是给中序和后序,求出二叉树. 解法一: 思路和105题差不多,只是pos是从后往前遍历,生成树顺序也是先右后左. class Solution ...

  6. [BZOJ 3039&洛谷P4147]玉蟾宫 题解(单调栈)

    [BZOJ 3039&洛谷P4147]玉蟾宫 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. ...

  7. 玉伯的一道课后题题解(关于 IEEE 754 双精度浮点型精度损失)

    前文 的最后给出了玉伯的一道课后题,今天我们来讲讲这题的思路. 题目是这样的: Number.MAX_VALUE + 1 == Number.MAX_VALUE; Number.MAX_VALUE + ...

  8. 【题解】Luogu P5313 僕たちはひとつの光([Ynoi2012]D2T2)

    原题传送门 lovelive好评 比赛时只拿到了60pts,还是自己太菜了 这题的思想实际有点像Luogu P3674 小清新人渣的本愿与Luogu P5071 [Ynoi2015]此时此刻的光辉 这 ...

  9. P4147 玉蟾宫 题解

    原题链接 简要题意: 求最大 \(0\) 矩阵.(将字符转化为数字) 本题是模板题,可以用来爆踩.??? 悬线法 来了! 其中绿色是 \(0\),红色是 \(1\). 下面以这个图为例讲一下算法流程. ...

随机推荐

  1. Ubuntu镜像的MD5校验

    造冰箱的大熊猫@cnblogs 2018/9/7 1.在Ubuntu终端中,按照以下格式输入命令计算镜像文件ubuntu-xxx.iso的MD5校验和. md5sum ubuntu-xxx.iso 2 ...

  2. Nowcoder Sum of Maximum ( 容斥原理 && 拉格朗日插值法 )

    题目链接 题意 : 分析 : 分析就直接参考这个链接吧 ==> Click here 大体的思路就是 求和顺序不影响结果.故转化一下思路枚举每个最大值对答案的贡献最后累加就是结果 期间计数的过程 ...

  3. cogs1682. [HAOI2014]贴海报 x

    1682. [HAOI2014]贴海报 ★★☆   输入文件:ha14d.in   输出文件:ha14d.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] Bytetow ...

  4. Mongo Cursor

    简介 在使用 Java 对数据库进行连接时,都会获取到一个 cursor ,cursor 实际指到的是我们查询数据库的query,而并不是 query 查询到的数据集. 此次在使用 mongo 的 c ...

  5. Contacts解析

    显示联系人相关类packages/apps/Contacts/src/com/android/contacts/activities/PeopleActivity.javapackages/apps/ ...

  6. linux面试常见

    https://www.cnblogs.com/wanghuaijun/p/7421008.html 一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 ...

  7. 解决Cannot change version of project facet Dynamic Web Module to 3.1

    Open web.xml from project structure http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version= ...

  8. python开发环境的搭建,以及pycharm的安装

    先到python 官网下载python. 下载好了之后,直接运行exe文件,进行安装(在安装程序运行后的第一个form上,点击next的时候,在next的左侧有一排文字和一个复选框,那个是添加环境变量 ...

  9. 1.5 log4j使用教程

    日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录.在apache网站:jakarta.apache.org/log4j 可以免费下载到Log ...

  10. JS - 获取函数的参数名称

    看 Angular 依赖注入时发现的神奇的操作,实现原理是 Function.prototype.toString() 得到函数的字符串然后用正则判断. 参见 javascript - How to ...