Luogu P3489 [POI2009]WIE-Hexer 最短路
https://www.luogu.org/problemnew/show/P3489
普通的最短路,不过我觉得这个复杂度按道理来说边数不应该是m*2^13吗,不知道是数据比较水还是实际上能证明复杂度低一些。
代码如下
#include<bits/stdc++.h>
using namespace std;
const int maxn = 210;
#define pa pair<int,int>
int n,m,p,k;
int dis[maxn][8200]={},kn[maxn]={};
bool vis[maxn][8200]={};
priority_queue< pa , vector< pa > , greater< pa > >q;
struct en{
int y,v,t,next;
}e[8000];
int head[maxn]={},tot=0;
void init(int x, int y, int v, int t){
e[++tot].next=head[x]; e[tot].y=y;
e[tot].t=t; e[tot].v=v; head[x]=tot;
}
void dji(){
q.push(make_pair(0,8200+kn[1]));dis[1][kn[1]]=0;
int flag=0,ans=dis[2][0];
while(!q.empty()){
int x=q.top().second;
int knf=x%8200;x/=8200;q.pop();
if(x==n){flag=1;cout<<dis[x][knf]<<endl;break;}
if(vis[x][knf])continue;
vis[x][knf]=1;
for(int i=head[x];i;i=e[i].next){
int y=e[i].y;
if((e[i].v|knf)==knf){
if(e[i].t+dis[x][knf]<=dis[y][knf|kn[y]]){
dis[y][knf|kn[y]]=e[i].t+dis[x][knf];
vis[y][knf|kn[y]]=0;
q.push( make_pair( dis[y][knf|kn[y]],y*8200+(knf|kn[y]) ) );
}
}
}
}
if(!flag)cout<<-1<<endl;
}
int main(){
scanf("%d%d%d%d",&n,&m,&p,&k);
memset(dis,63,sizeof(dis));
for(int i=1;i<=k;++i){
int x,y,z; scanf("%d%d",&x,&y);
for(int j=1;j<=y;++j){
scanf("%d",&z); kn[x]|=1<<(z-1);
}
}
for(int i=1;i<=m;++i){
int x,y,z,t,w,v=0; scanf("%d%d%d%d",&x,&y,&t,&z);
for(int j=1;j<=z;j++){
scanf("%d",&w); v|=1<<(w-1);
} init(x,y,v,t); init(y,x,v,t);
}
dji();
return 0;
}
Luogu P3489 [POI2009]WIE-Hexer 最短路的更多相关文章
- 1139: [POI2009]Wie
1139: [POI2009]Wie https://www.lydsy.com/JudgeOnline/problem.php?id=1139 分析: Dijkstra.状压最短路,dis[i][j ...
- Luogu P2483 【模板】k短路([SDOI2010]魔法猪学院)
说实话,看到这道题的洛谷评级我傻了(传说中的最高难度) 然后看完题目才确定这真的是一道k短路的裸题. 也就敲了个A*吧,15分钟竟然没有调试一遍过. 欧洲玄学. 看题目,主要是找几条从1走到n的路加起 ...
- Luogu P5122 [USACO18DEC]Fine Dining 最短路
先跑一遍n为起点最短路,再新开一个点,向有干草垛的点连一根边权为d[u]-w的有向边(很重要..我当时连的无向边,然后我死了.),相当于用价值抵消一部分边权, 然后以这个新的点为起点跑最短路就好了.. ...
- bzoj1139:[POI2009]Wie
传送门 状压dp,最短路 spfa似乎特别慢 代码: #include<cstdio> #include<iostream> #include<algorithm> ...
- luogu 5468 [NOI2019]回家路线 最短路/暴力
想写一个 70 pts 算法,结果数据水,直接就切了 最短路: // luogu-judger-enable-o2 #include<bits/stdc++.h> using namesp ...
- Luogu P1073 最优贸易(最短路)
P1073 最优贸易 题意 题目描述 \(C\)国有\(n\)个大城市和\(m\)条道路,每条道路连接这\(n\)个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这\(m\)条道路中有 ...
- Luogu P1462 通往奥格瑞玛的道路(最短路+二分)
P1462 通往奥格瑞玛的道路 题面 题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己 ...
- [POI2009]Wie
题目 BZOJ 虽然是解压题但也学到了简洁的码风 做法 \(dijkstra\)跑动规 My complete code #include<bits/stdc++.h> #include& ...
- Luogu 3479 [POI2009]GAS-Fire Extinguishers
补上了这一道原题,感觉弱化版的要简单好多. 神贪心: 我们设$cov_{x, i}$表示在$x$的子树中与$x$距离为$i$的还没有被覆盖到的结点个数,设$rem_{x, i}$表示在$x$的子树中与 ...
随机推荐
- wpf Log4net的配置和使用
现在项目涉及的是cs客户端,在项目中使用log4net记录本地日志和异常信息,这里项目做完了,想着自己做一个demo,测试记录一下log4Net的配置使用. 第一步.新建一个wpf应用程序,项目右键 ...
- Ubuntu 18.04 上使用xrdp远程桌面连接(Windows远程桌面连接)
Ubuntu18.04设置#安装xrdpsudo apt-get install xrdp #安装vnc4serversudo apt-get install vnc4server tightvncs ...
- 主机与虚拟机ping不通问题
在win10 上利用vm安装linux虚拟机,物理机与虚拟机之间不能ping通,除了检查物理机与虚拟机防火墙状态外,还要注意物理机设置的ip与虚拟机设置的ip,要在同一个ip段
- Mycat分布式数据库架构解决方案--Server.xml详解
echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! 该文件 ...
- 二叉树&满二叉树与完全二叉树
二叉树的定义 二叉树(Binary Tree)是n(n≥0)个元素的有限集合,该集合为空或者为由一个称为"根"的元素及两个不相交的.被分别称为左子树和右子树的二叉树组成 二叉树的基 ...
- UCOSII软件定时器
API函数 //创建 OS_TMR *OSTmrCreate (INT32U dly, INT32U period, INT8U opt, OS_TMR_CALLBACK callback, void ...
- OS UIButton之UIButtonType详解-转
我做了一个关于UIButtonType的Demo,效果如下图: UIButtonType各个类型的解释: typedef NS_ENUM(NSInteger, UIButtonType) { UIBu ...
- CLR、CIL、CTS、CLS、CLI、BCL和FCL,JIT,IL,GC
如果要想深入学习.NET平台,那么标题中的这些关键字对你来说并不陌生,这些名词构成了.NET庞大的生态系统,为了宏观认识.NET平台,学些.NET架构体系,针对一些常用常用名词的理解是很有必要的,未必 ...
- redis 异常 MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk
MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. 解决方 ...
- 设置Layer模态框的 z-index
$.get(url, {}, function(data){ layui.use(['layer'],function () { var layer = layui.layer,$=layui.$; ...