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$的子树中与 ...
随机推荐
- AS3.0 字母大小写转换
字母大小写转换: /** * * *-------------------------* * | *** 字母大小写转换 *** | * *-------------------------* * * ...
- HTML5单页框架View.js介绍
什么是单页应用单页应用,是指将用户视觉上的多个页面在技术上使用一个载体来实现的应用. 换句话来讲,用户视觉效果,与技术实现的载体,并不是一定要一一对应的.采取哪种技术方案,取决于产品设计.技术组成以及 ...
- Centos 7 添加开机启动
1.添加启动服务 添加docker开机启动服务 [root@localhost ~]# systemctl enable docker.serviceCreated symlink from /etc ...
- 测试不得不知的python编程小技能-----升级版基础语法和优秀的编码习惯
编程和学习python,最后快速上手.能写小工具,写自动化用例这类要求对鹅厂的测试人员来说都是一些基础的必备素质,但是一个优秀的测试,也是有着一颗开发完美测试工具的心的.但是罗马不是一天构建成,特别是 ...
- 【.Net Core】编译时禁止自动生成netcoreapp文件夹
原文:[.Net Core]编译时禁止自动生成netcoreapp文件夹 每次在编译生成文件时,VS都会自动在<OutputPath>属性指定的路劲后再追加一个用NetCore命名的文件夹 ...
- 谈一谈重 ORM 和 轻 ORM + SQL 的一些经验
ORM 的本质比较简单,就是对象关系映射 Object Relation Mapping 那很多人都经常会说的一个问题,EF 或 EF Core 好啊,方便啊,不用写麻烦的 SQL ,写 SQL 又要 ...
- 【新手可看懂】ubuntu配置appium环境
1.node安装: 在node官网:https://nodejs.org/en/download/ 下载对应的安装包(这里建议下载最新的版本)下载好后放在liunx指定路径下 我这里放到opt这个文件 ...
- 微信支付接口--支付成功的回调--超详细Demo
如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人.谢谢大家!❤ 如果解决不了,可以在文末进群交流. 如果对你有帮助的话麻烦点个[推荐]~最好还可以follow一下我的GitHub~感谢观看! 写 ...
- flutter入门开发的一些坑
flutter入门开发的一些坑 很久没写博客了,最近在准备物联网比赛,顺便抽出时间学习了一下flutter,花了近2周完成了一个查看博客博文的一个小的APPdemo,随便截了两张图,如下: 首页 博客 ...
- Maven的下载,配置环境,导入编译器,使用说明一条龙
什么是Maven?可以认为Maven是写程序时导入jar包的一个轻便的工具. 第一步Maven下载 1.Maven(点击进入),点击一个zip包下载 2.解压maven包,复制maven ...