[BZOJ1880] [Sdoi2009] Elaxia的路线 (SPFA 拓扑排序)

Description

最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间。Elaxia和w**每天都要奔波于宿舍和实验室之间,他们 希望在节约时间的前提下,一起走的时间尽可能的长。 现在已知的是Elaxia和w**所在的宿舍和实验室的编号以及学校的地图:地图上有N个路 口,M条路,经过每条路都需要一定的时间。
具体地说,就是要求无向图中,两对点间最短路的最长公共路径。

Input

第一行:两个整数N和M(含义如题目描述)。 第二行:四个整数x1、y1、x2、y2(1 ≤ x1 ≤ N,1 ≤ y1 ≤ N,1 ≤ x2 ≤ N,1 ≤ ≤ N),分别表示Elaxia的宿舍和实验室及w**的宿舍和实验室的标号(两对点分别 x1,y1和x2,y2)。 接下来M行:每行三个整数,u、v、l(1 ≤ u ≤ N,1 ≤ v ≤ N,1 ≤ l ≤ 10000),表 u和v之间有一条路,经过这条路所需要的时间为l。 出出出格格格式式式::: 一行,一个整数,表示每天两人在一起的时间(即最长公共路径的长度)。

Output

一行,一个整数,表示每天两人在一起的时间(即最长公共路径的长度)

Sample Input

9 10
1 6 7 8
1 2 1
2 5 2
2 3 3
3 4 2
3 9 5
4 5 3
4 6 4
4 7 2
5 8 1
7 9 1

Sample Output

3

HINT

  对于30%的数据,N ≤ 100;
  对于60%的数据,N ≤ 1000;
  对于100%的数据,N ≤ 1500,输入数据保证没有重边和自环。

Source

  Day2

Solution

  补个条件:$m\leq 500000$

  如果$dis_{s->u_i}+w_i=dis_{t->v_i}$,那么边$i$才可能成为答案

  这些边组成的图一定是一个拓扑图,走一遍最长链即可。

  其实主要的坑点在于因为是无向图,所以需要反着做一遍

  也就是说,$x_1$->$y_1$和$y_2$->$x_2$的公共路径也可能是答案,也就是说,原题意是错的= =b

  1 #include <bits/stdc++.h>
  2 using namespace std;
  3 struct edge
  4 {
  5     int v, w, nxt;
  6 }e[2000005];
  7 int fst[2][1505], dis[6][1505], q[2105], indeg[1505];
  8 int n, etot, sss1, ttt1, sss2, ttt2;
  9 bool inq[1505];
 10 
 11 void addedge(int *f, int u, int v, int w)
 12 {
 13     e[++etot] = (edge){v, w, f[u]}, f[u] = etot;
 14 }
 15 
 16 bool check(int u, int i)
 17 {
 18     if(dis[1][u] + e[i].w + dis[2][e[i].v] != dis[1][ttt1]) return false;
 19     return dis[3][u] + e[i].w + dis[4][e[i].v] == dis[3][ttt2];
 20 }
 21 
 22 void SPFA(int sss, int *d)
 23 {
 24     int front = 0, back;
 25     memset(d, 63, 6020);
 26     q[back = 1] = sss, d[sss] = 0, inq[sss] = true;
 27     while(front != back)
 28     {
 29         int u = q[++front & 2047];
 30         front &= 2047, inq[u] = false;
 31         for(int i = fst[0][u]; i; i = e[i].nxt)
 32             if(d[e[i].v] > d[u] + e[i].w)
 33             {
 34                 d[e[i].v] = d[u] + e[i].w;
 35                 if(!inq[e[i].v])
 36                 {
 37                     q[++back & 2047] = e[i].v;
 38                     back &= 2047, inq[e[i].v] = true;
 39                 }
 40             }
 41     }
 42 }
 43 
 44 int Topo_sort()
 45 {
 46     int front = 0, back = 0, ans = 0;
 47     for(int i = 1; i <= n; ++i)
 48         if(!indeg[i]) q[++back] = i;
 49     while(front != back)
 50     {
 51         int u = q[++front];
 52         for(int i = fst[1][u]; i; i = e[i].nxt)
 53         {
 54             int v = e[i].v, w = e[i].w;
 55             dis[0][v] = max(dis[0][v], dis[0][u] + w);
 56             if(!--indeg[e[i].v]) q[++back] = v;
 57         }
 58     }
 59     for(int i = 1; i <= n; ++i)
 60         ans = max(ans, dis[0][i]);
 61     return ans;
 62 }
 63 
 64 int main()
 65 {
 66     int m, u, v, w, ans;
 67     scanf("%d%d", &n, &m);
 68     scanf("%d%d%d%d", &sss1, &ttt1, &sss2, &ttt2);
 69     for(int i = 1; i <= m; ++i)
 70     {
 71         scanf("%d%d%d", &u, &v, &w);
 72         addedge(fst[0], u, v, w);
 73         addedge(fst[0], v, u, w);
 74     }
 75     SPFA(sss1, dis[1]), SPFA(ttt1, dis[2]);
 76     SPFA(sss2, dis[3]), SPFA(ttt2, dis[4]);
 77     for(int i = 1; i <= n; ++i)
 78         for(int j = fst[0][i]; j; j = e[j].nxt)
 79             if(check(i, j))
 80             {
 81                 addedge(fst[1], i, e[j].v, e[j].w);
 82                 ++indeg[e[j].v];
 83             }
 84     ans = Topo_sort();
 85     memset(fst[1], 0, sizeof(fst[1]));
 86     memset(dis[0], 0, sizeof(dis[0]));
 87     memset(indeg, 0, sizeof(indeg));
 88     swap(sss2, ttt2);
 89     SPFA(sss2, dis[3]), SPFA(ttt2, dis[4]);
 90     for(int i = 1; i <= n; ++i)
 91         for(int j = fst[0][i]; j; j = e[j].nxt)
 92             if(check(i, j))
 93             {
 94                 addedge(fst[1], i, e[j].v, e[j].w);
 95                 ++indeg[e[j].v];
 96             }
 97     ans = max(ans, Topo_sort());
 98     printf("%d\n", ans);
 99     return 0;
100 }
View Code

 

转载于:https://www.cnblogs.com/CtrlCV/p/5618932.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ffmpeg的编译大全

ffmpeg的编译大全 最近互联网视频共享的网站很火&#xff0c;公司也想搞类似的网站&#xff0c;初步是用fmsffmpeg形式 fms负责在线录制&#xff0c;播放&#xff0c;ffmpeg则在后台处理上传的资源转换成一定的格式。 为了让ffmpeg支持的格式尽量多&#xff0c;所以特把我的编译…

用OPENCV视觉解数独

用OPENCV视觉解数独 2010-06-29 看到增强视觉网站上介绍老外用视觉解SUDOKU(http://www.cvchina.info/2011/05/29/video-sudoku-solver/)&#xff0c;觉得应该不难&#xff0c;于是用OPENCV和训练好的数字分类器&#xff0c;也试着做一个&#xff0c;纯属娱乐 基本思路如下&…

集成ffmpeg/x264:ERROR: libx264 not found的问题

集成ffmpeg/x264:ERROR: libx264 not found的问题--拔剑集成ffmpeg/x264碰到如下问题&#xff1a; ERROR: libx264 not found察看config.log,详细信息如下&#xff1a;check_lib x264.h x264_encoder_encode -lx264check_header x264.hcheck_cppBEGIN/tmp/ffconf.isuazGlg.c1 …

[ActionScript 3.0] AS3.0 下雨及涟漪效果

帧代码&#xff1a; stage.frameRate 80;function init(x1:Number,y1:Number) {var mc:MovieClipnew MovieClip();addChild(mc);mc.x x1;mc.y y1;mc.graphics.lineStyle(0.5,0xbbffff,0.6);mc.graphics.drawEllipse(-1,-0.3,2,0.6);mc.addEventListener(Event.ENTER_FRAME,f…

JS Math.round()方法原理

请先测试代码&#xff1a; 1 <!doctype html>2 <html lang"en">3 4 <head>5 <meta charset"UTF-8" />6 <title>Math.round方法</title>7 <style type"text/css">8 …

一个通用Makefile的编写

我们在 LinuxLinux Linux是一套免费使用和自由传播的操作系统&#xff0c;它主要用于基于Intel系列CPU的计算机上。这个系统是由全世界各地的成千上万的程序员设计和实现的&#xff0c;其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品。 环境下…

Cache替换算法:LRU与LFU的区别

LFU&#xff08;Least Frequently Used&#xff09;最近最少使用算法。它是基于“如果一个数据在最近一段时间内使用次数很少&#xff0c;那么在将来一段时间内被使用的可能性也很小”的思路。LRU&#xff08;Least Recently Used&#xff09;. 注意LFU和LRU算法的不同之处&…

001-Ansible-参考http://www.ansible.com.cn/docs/playbooks_intro.html#about-playbooks

1. Patterns 在Ansible中,Patterns 是指我们怎样确定由哪一台主机来管理. 意思就是与哪台主机进行交互. ansible <pattern_goes_here> -m <module_name> -a <arguments>ansible webservers -m service -a "namehttpd staterestarted"同时让我们提前…

linux下通用Makefile写法

linux编译多个源文件的程序比较麻烦&#xff0c;这下就需要通用的Makefile了&#xff0c;编译的时候执行一下make命令就OK&#xff0c;下面介绍通用makfile的写法。 假设现在有以下源文件&#xff1a;file1.h file1.c file2.h file2.c mainproc.c&#xff0c;程序的主函数在mai…

客服弹出框

html代码&#xff1a; <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title>QQ在线客服jquery特效</title><link rel"stylesheet" type"text/css" href"common/css/lay…

第三次毕业设计任务书

一. 进度计划 时间 计划进度 3.24-3.30 尝试将kdd数据预处理用代码实现 3.31-4.6 将kdd数据预处理用代码实现以及与aprior算法的结合 二. 课题需求 2.1 数据预处理的功能和主要方法 在现实中,由于数据的来源、组织、存储等的多样性,海量的原始数据中一般都很难避免“脏数据…

电商第一季函数笔记(1)

1、isset (PHP 4, PHP 5, PHP 7) isset — 检测变量是否设置 说明 bool isset ( mixed $var [, mixed $... ] ) 检测变量是否设置&#xff0c;并且不是 NULL。 如果已经使用 unset() 释放了一个变量之后&#xff0c;它将不再是 isset()。若使用 isset() 测试一个被设置成 NULL …

压缩xvid ffmpeg x264 对比

压缩xvid ffmpeg x264 对比 Xvid是基于MPEG4协议的编解码器&#xff0c;x264是基于H.264协议的编码器&#xff0c;ffmpeg集合了各种音频&#xff0c;视频编解码协议&#xff0c;通过设置参数可以完成基于MPEG4,H.264等协议的编解码&#xff0c;现在将其对比结果罗列如下&#…

JMS-activMq与spring进行整合

对JMS做了一个简要介绍之后&#xff0c;接下来就讲一下Spring整合JMS的具体过程。JMS只是一个标准&#xff0c;真正在使用它的时候我们需要有它的具体实现&#xff0c;这里我们就使用Apache的activeMQ来作为它的实现。所使用的依赖利用Maven来进行管理&#xff0c;具体依赖如下…

微信消息

微信消息 转载于:https://www.cnblogs.com/linewman/p/9918298.html

make: 警告:检测到时钟错误。您的创建可能是不完整的。

我在make的时候也出现了同样的问题&#xff0c;不过不是什么大问题&#xff0c;这个不影响编译结果分析原因可能是&#xff1a; 服务器上的文件最后修改时间比当前时钟要晚解决办法&#xff1a; 用touch 命令把源程序的时间戳改一下 find . -type f -exec touch {} \;或者touch…

FileReader/FileWriter复制文件

public class Test{ /*FileReader/FileWriter读写乱码&#xff0c;待处理*/ public static void main(String[] args) throws IOException{ FileReader fileReader null; FileWriter fileWriter null; try{ fileReader new FileReader("c:/123/666.doc"); fileWri…

machine ID问题 ( u-boot设置machine id , set mach_type 0x16a )

machine ID问题 machine ID问题跟CPU具体到型号相关&#xff0c;启动时打印信息如下&#xff1a; Uncompressing Linux...........................................................................done,booting the kernel. Error:unrecoginized/unsupported machine ID(r1…

FFMPEG使用参数详解

FFMPEG使用参数详解 目前又开始测MPEG1和MPEG2的解码&#xff0c;在准备编码好的测试序列过程中&#xff0c;需要通过编码器来进行原始视频序列的编码操作&#xff0c;以生成我们需要的测试数据。由于IPP example提供的Encoder不支持MPEG1&#xff0c;经过查询&#xff0c;决定…

模拟支付宝、淘宝登录1

1、进入支付宝首页 GET https://auth.alipay.com/login/index.htm HTTP/1.1Accept: */*Accept-Language: zh-CNAccept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; …