2018 ICPC南京网络赛 L Magical Girl Haze 题解
大致题意:
给定一个n个点m条边的图,在可以把路径上至多k条边的权值变为0的情况下,求S到T的最短路。
数据规模: N≤100000,M≤200000,K≤10
建一个立体的图,有k层,每一层是一份原图,消耗一次把一条边权值变为0的机会 = 在立体图中升一层
然后跑堆优化dij就好了,会卡spfa。
AC代码:
#include<cstdio>
#include<queue>
#include<cstring>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int MAXN=;
const int MAXM=;
typedef pair<long long,pair<int,int> > pii;
priority_queue<pii,vector<pii>,greater<pii> > q;
bool visit[MAXN][];
int pointer[MAXN];
long long d[MAXN][];
int n,m,k,tot=,S,T;
const long long INF=1e17;
struct Edge
{
int to,next;
long long w;
Edge() {};
Edge(int b,int nxt,int weight) {to=b,next=nxt,w=weight;}
}edge[MAXM];
inline void addedge(int a,int b,int w1)
{
edge[tot]=Edge(b,pointer[a],w1);
pointer[a]=tot++;
}
void dijkstra()
{
rep(i,S,T) rep(z,,k) d[i][z]=INF;
d[S][]=;
memset(visit,,sizeof(visit));
q.push(make_pair(d[S][],make_pair(S,)));
while(!q.empty())
{
pii u=q.top();q.pop();
int x=u.second.first,stp=u.second.second;
if(visit[x][stp]) continue;
visit[x][stp]=;
for(int j=pointer[x];j!=-;j=edge[j].next)
{
int &v=edge[j].to;
if(d[v][stp]>d[x][stp]+edge[j].w)
{
d[v][stp]=d[x][stp]+edge[j].w;
q.push(make_pair(d[v][stp],make_pair(v,stp)));
}
if(stp<k&&d[v][stp+]>d[x][stp])
{
d[v][stp+]=d[x][stp];
q.push(make_pair(d[v][stp+],make_pair(v,stp+)));
}
}
}
}
void init()
{
tot=;
memset(pointer,-,sizeof(pointer));
}
void Input()
{
scanf("%d%d%d",&n,&m,&k);
int u,v;
long long w;
rep(i,,m)
{
scanf("%d%d%lld",&u,&v,&w);
addedge(u,v,w);
}
S=;T=n;
}
int main()
{
//freopen("in.txt","r",stdin);
int TT;
scanf("%d",&TT);
rep(tt,,TT)
{
init();
Input();
dijkstra();
long long ans=INF;
rep(i,,k) ans=min(ans,d[n][i]);
printf("%lld\n",ans);
}
return ;
}
2018 ICPC南京网络赛 L Magical Girl Haze 题解的更多相关文章
- 2018icpc南京网络赛-L Magical Girl Haze (分层图最短路)
题意: 有向图,可以把k条路的长度变为0,求1到n的最短路 思路: 将图复制k份,一共k+1层图,对于每一条i→j,都连一条低层的i→高层的j,并且权值为0 即对每一对<i,j,w>,都加 ...
- ICPC 2018 南京网络赛 J Magical Girl Haze(多层图最短路)
传送门:https://nanti.jisuanke.com/t/A1958 题意:n个点m条边的路,你有k次机会将某条路上的边权变为0,问你最短路径长度 题解:最短路变形,我们需要在常规的最短路上多 ...
- 【2018 ICPC南京网络赛 A】An Olympian Math Problem(数论题)
Alice, a student of grade 6, is thinking about an Olympian Math problem, but she feels so despair th ...
- 2018 ICPC南京网络赛 Set(字典树 + 合并 + lazy更新)
题解:n个集合,你要进行m个操作.总共有3种操作.第一种,合并两个集合x和y.第二张,把特定的集合里面所有的数字加一.第三种,询问在某个集合里面,对于所有数字对2的k次方取模后,有多少个数字等于x. ...
- 2018 ICPC 沈阳网络赛
2018 ICPC 沈阳网络赛 Call of Accepted 题目描述:求一个算式的最大值与最小值. solution 按普通算式计算方法做,只不过要同时记住最大值和最小值而已. Convex H ...
- 2018 ICPC 徐州网络赛
2018 ICPC 徐州网络赛 A. Hard to prepare 题目描述:\(n\)个数围成一个环,每个数是\(0\)~\(2^k-1\),相邻两个数的同或值不为零,问方案数. solution ...
- 2018 ICPC 焦作网络赛 E.Jiu Yuan Wants to Eat
题意:四个操作,区间加,区间每个数乘,区间的数变成 2^64-1-x,求区间和. 题解:2^64-1-x=(2^64-1)-x 因为模数为2^64,-x%2^64=-1*x%2^64 由负数取模的性质 ...
- 2018南京网络赛L题:Magical Girl Haze(最短路分层图)
题目链接:https://nanti.jisuanke.com/t/31001 解题心得: 一个BZOJ的原题,之前就写过博客了. 原题地址:https://www.lydsy.com/JudgeOn ...
- ACM-ICPC 2018 南京赛区网络预赛 L. Magical Girl Haze
262144K There are NN cities in the country, and MM directional roads from uu to v(1\le u, v\le n)v ...
随机推荐
- python 两个 list 获取交集,并集,差集的函数
1. 获取两个 list 的交集 a = [1, 2, 3, 4] b = [1, 2, 5] print(list(set(a).intersection(set(b)))) 2. 获取两个 lis ...
- Java正则表达式实现港、澳、台身份证验证
最近由于业务的要求,需要进行港.澳.台人员身份证验证,现在直接上代码,经供参考学习,也为自己积累一些工具类: package com.qiu.validate; public class regexV ...
- 免费代理ip爬虫分享
分享一个某代理网站的免费代理ip的爬虫,直接复制到pycharm运行就可以了. 注意:爬取的代理ip有点坑,因为是免费的所以过期时间很快,可能1分钟后就会失效.并且在scrapy使用这些代理ip还会给 ...
- Python_Mix*re模块,元字符,量词
模块: 模块就是一组功能的集合,你要和某个东西打交道,而这个东西本身和Python没有关系,这个东西本身就存在,Python提供了一个功能的集合,专门负责和这个东西打交道. 模块的类型: 内置模块 不 ...
- SoapUI之http接口测试
SoapUI是一个开源测试工具,可以进行webservice/http协议的功能.负载.安全性测试.SoapUI pro是SoapUI的商业非开源版本,实现的功能会更多一点.一般的测试场景,用开源版本 ...
- centos 7添加硬盘及LVM扩容
一堆概念 分区工具 fdisk:支持MBR,对GPT支持的不好 parted:支持GPT partprobe(centos 5/6).partx(centos 7)通知内核强制重读磁盘分区表 分区表 ...
- linux下C获取文件的大小
获取文件大小这里有两种方法: 方法一. 范例: unsigned long get_file_size(const char *path) { unsigned long filesize = -1; ...
- ImportError: No module named _tkinter, please install the python-tk package ubuntu运行tkinter错误
这是由于Python的版本没有包含tkinter的模块,只需要把tk的package安装就可以了. 一般在Linux才出现,windows版本一般已经包含了tkinter模块. apt-get ins ...
- dubbo入门学习笔记之环境准备
粗略的学完springcloud后由于公司的项目有用到一点dubbo,刚好手头上又有dubbo的学习资料,于是趁机相对系统的学了下duboo框架,今天开始记录下我的所学所悟;说来惭愧,今年之前,作为一 ...
- linux 增加虚拟内存swap(使用文件)
1.简介 如果你的服务器的总是报告内存不足,并且时常因为内存不足而引发服务被强制kill的话,在不增加物理内存的情况下,启用swap交换区作为虚拟内存是一个不错的选择. 为了测试一些功能我在阿里云购买 ...