【GDOI 2016 Day2】第一题 SigemaGO
题目
分析
拆点连边+spfa。
首先把图分成2lim+1层,也就是每个点拆成2lim+1个点。
如果a和b之间、b和c有一条有向边,那么连边(k,a)-->(k+1,b),(k+1,b)-->(k+2,c)(k=1、3、5、···、2lim+1,是当前点所在的层数),这两条边的权值和是l。也就是说当走了(k,a)-->(k+1,b)-->(k+2,c)这条路线时,就是抄了一次近道。
注意:在spfa中,当走到的点在第2、4、6、···、2lim层时,就只能往上走,因为当前点一定在抄近道的过程中。
#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const int maxlongint=2147483647;
using namespace std;
int next[800000],last[800000],to[800000],dis[13][200000],n,m,lim,l,tot,v[800000],ans,d[10000000][2];
bool bz[200000];
int bj(int x,int y,int z)
{
next[++tot]=last[x];
last[x]=tot;
to[tot]=y;
v[tot]=z;
}
int spfa()
{
int i,j,head=0,tail=1,k;
d[1][0]=0;
d[1][1]=1;
dis[0][1]=0;
while(head<tail)
{
k=++head;
bz[d[k][0]*n+d[k][1]]=true;
for(i=last[d[k][1]+n*d[k][0]];i;i=next[i])
{
j=to[i];
int x=(j-1)/n;
if(dis[x][(j-1)%n+1]>dis[d[k][0]][d[k][1]]+v[i])
{
dis[x][(j-1)%n+1]=dis[d[k][0]][d[k][1]]+v[i];
if(bz[j])
{
bz[j]=false;
d[++tail][0]=x;
d[tail][1]=(j-1)%n+1;
}
}
}
}
}
int main()
{
freopen("sigemago.in","r",stdin);
freopen("sigemago.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&l,&lim);
for(int i=1;i<=m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
for(int j=1;j<=lim+1;j++)
{
bj(x+n*(j*2-2),y+n*(j*2-2),z);
}
for(int j=1;j<=lim*2;j++)
{
bj(x+n*(j-1),y+n*j,l*(j%2));
}
}
memset(dis,60,sizeof(dis));
memset(bz,true,sizeof(bz));
spfa();
ans=maxlongint;
for(int i=1;i<=lim+1;i++)
{
if(ans>dis[i*2-2][n]) ans=dis[i*2-2][n];
}
if(ans>=dis[0][0]) printf("-1\n");
else
printf("%d\n",ans);
}
【GDOI 2016 Day2】第一题 SigemaGO的更多相关文章
- NOIP2011 day2 第一题 计算系数
计算系数 NOIP2011 day2 第一题 描述 给定一个多项式(ax+by)^k,请求出多项式展开后x^n*y^m项的系数. 输入格式 共一行,包含5 个整数,分别为 a ,b ,k ,n ,m, ...
- 2016/1/12 第一题 输出 i 出现次数 第二题 用for循环和if条件句去除字符串中空格 第三题不用endwith 实现尾端字符查询
import java.util.Scanner; public class Number { private static Object i; /* *第一题 mingrikejijavabu中字符 ...
- GDOI 2016 & APIO 2016 游记
缓慢施工中...... UPD:APIO游记已烂尾......因为Cu滚粗+生病一直没心情写..过了几天就发现APIO的事都快忘光了...去看KPM的就可以啦 今年apio竟然没和gdoi撞...智障 ...
- [算法 笔记]2014年去哪儿网 开发笔试(续)第一题BUG修正
上一篇的blog地址为:http://www.cnblogs.com/life91/p/3313868.html 这几天又参加了一个家公司的笔试题,在最后的编程题中竟然出现了去哪儿网开发的第一题,也就 ...
- 《学习OpenCV》练习题第五章第一题ab
这道题是载入一幅带有有趣纹理的图像并用不同的模板(窗口,核)大小做高斯模糊(高斯平滑),然后比较用5*5大小的窗口平滑图像两次和用11*11大小的窗口平滑图像一次是否接近相同. 先说下我的做法,a部分 ...
- 《学习OpenCV》练习题第四章第一题b&c
#include <highgui.h> #include <cv.h> #pragma comment (lib,"opencv_calib3d231d.lib&q ...
- 《学习OpenCV》练习题第四章第一题a
#include <highgui.h> #include <cv.h> #pragma comment (lib,"opencv_calib3d231d.lib&q ...
- Google Code Jam 第一题
通过的第一题,留做纪念,呵呵,非常简单,Africa 2010, Qualification Round: Store Credit. #include <stdio.h> #includ ...
- 图论测试题(一)第一题:longest
第一题:longest 乌托邦有n个城市,某些城市之间有公路连接.任意两个城市都可以通过公路直接或者间接到达,并且任意两个城市之间有且仅有一条路径(What does this imply? A tr ...
随机推荐
- C# Setting.settings . 用法 2 使用配置文件(.settings、.config)存储应用程序配置
引言 我不知大家早先是如何保存应用程序配置,以备下次打开时使用的,反正我开始学.Net的时候就去研究序列化,以二进制或XML格式的序列化来保存应用程序配置.这样每次都要建立单独的配置类,并书写读写配置 ...
- HttpClient设置忽略SSL,实现HTTPS访问, 解决Certificates does not conform to algorithm constraints
话不多说,直接上代码. 测试API: https://api.k780.com/?app=life.time&appkey=10003&sign=b59bc3ef6191eb9f7 ...
- TS学习笔记----(一)基础类型
布尔值: boolean let isDone: boolean = false; 数字: number 和JavaScript一样,TS里的所有数字都是浮点数. 支持十进制和十六进制字面量,TS还支 ...
- .Net Core - 使用Supervisor进行托管部署
环境 CentOS 7 x64,详见 安装CentOS7虚拟机 .Net Core 2.1.801 详见 CentOS 7 下安装.NET Core SDK 2.1 ftp 详见 CentOS7 ...
- linux-memcache安装及memcached memcache扩展
linux memcached安装yum -y install libevent libevent-deve yum list memcached yum -y install memcached m ...
- 01分数规划问题(二分法与Dinkelbach算法)
链接 前置技能 二分思想 最短路算法 一些数学脑细胞? 问题模型1基本01分数规划问题给定n个二元组(valuei,costi),valuei是选择此二元组获得的价值(非负),costi是选择此二元组 ...
- docker容器配置hosts
在mac开发的时候,docker容器没有配置hosts,但是mac本机配置了hosts,这个本机的hosts配置对docker容器里面的所有容器都适用,但是到了linux的时候反而不适用了 可以通过下 ...
- win 10 自带 Ubuntu 系统的文件位置
win 10 自带 Ubuntu 系统的文件位置 Ubuntu 作为最为流行 Linux 系统中的一种,是用来学习 Linux 相关知识是最好不过的选择.专门搞一个 Ubuntu 系统的电脑不太现实, ...
- html5移动端Meta的设置
强制让文档的宽度与设备的宽度保持1:1,并且文档最大的宽度比例是1.0,且不允许用户点击屏幕放大浏览 1 <meta name="viewport" content=&quo ...
- oracle给用户赋dblink权限
create database link 别名(可任意起) connect to 需要连接库的用户名identified by 需要连接库的用户名 using '(DESCRIPTION =(ADDR ...