JZOJ 5818. 【NOIP提高A组模拟2018.8.15】 做运动
5818. 【NOIP提高A组模拟2018.8.15】 做运动
(File IO): input:running.in output:running.out
Description
幸好 Y 君现在退役了,她有大量的时间来做运动,她决定每天从教学楼跑到食堂来减肥。
Y 君将学校中的所有地点编号为 1 到 n,其中她的教学楼被编号为 S,她的食堂被编号为 T, 学校中有 m 条连接两个点的双向道路,保证从任意一个点可以通过道路到达学校中的所有点。
然而 Y 君不得不面临一个严峻的问题,就是天气十分炎热,如果 Y 君太热了,她就会中暑。 于是 Y 君调查了学校中每条路的温度 t,及通过一条路所需的时间 c。Y 君在温度为 t 的地 方跑单位时间,就会使她的热量增加 t。
由于热量过高 Y 君就会中暑,而且 Y 君也希望在温度较低的路上跑,她希望在经过的所有 道路中最高温度最低的前提下,使她到达食堂时的热量最低 (从教学楼出发时,Y 君的热量为 0)。
请你帮助 Y 君设计从教学楼到食堂的路线,以满足她的要求。你只需输出你设计的路线中所 有道路的最高温度和 Y 君到达食堂时的热量。
Input
接下来 m 行,每行由一个空格隔开的四个整数 a, b, t, c 分别代表双向道路的两个端点,温度 和通过所需时间.
最后一行由一个空格隔开的两个正整数 S, T,代表教学楼和食堂的编号。
注意:输入数据量巨大,请使用快速的读入方式。
Output
Sample Input
5 6
1 2 1 2
2 3 2 2
3 4 3 4
4 5 3 5
1 3 4 1
3 5 3 6
1 5
Sample Output
3 24
Data Constraint
另外 10% 的数据满足 c = 0
另外 30% 的数据满足 n ≤ 2000
100% 的数据满足 n ≤ 5 × 10^5 , m ≤ 10^6 , 0 ≤ t ≤ 10000, 0 ≤ c ≤ 10^8 , 1 ≤ a, b, S, T ≤ n, S ≠ T
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#define N 1000007
#define NU 17442269567978
#define LL long long
using namespace std;
LL n, m, S, T, tot, ls[N], Ans, cnt;
LL dis[N];
int f[N];
struct edge
{
LL to, next;
LL w;
}e[N * ];
struct arr
{
int x, y, t, w;
}E[N];
queue<LL> q;
bool v[N * ]; inline int Read()
{
int s = ;
char ch = getchar();
while (ch < '' || ch > '') ch = getchar();
while (ch >= '' && ch <= '') s = s * + ch - '', ch = getchar();
return s;
} inline void Add(int x, int y, LL z)
{
e[++tot].to = y;
e[tot].w = z;
e[tot].next = ls[x];
ls[x] = tot;
} int Find(int x)
{
if (f[x] == ) return x;
f[x] = Find(f[x]);
return f[x];
} void Work()
{
for (int i = ; i <= m; i++)
{
int u = Find(E[i].x), v = Find(E[i].y);
if (u != v) f[u] = v;
if (Find(S) == Find(T))
{
cnt = i;
int k = E[i].t;
for (int j = i + ; j <= m; j++)
{
if (E[j].t > k) break;
cnt = j;
}
Ans = k;
return;
}
}
} void Spfa()
{
for (int i = ; i <= n; i++)
dis[i] = NU;
memset(v, , sizeof(v));
dis[S] = ;
v[S] = ;
q.push(S);
for (; !q.empty();)
{
int now = q.front();
q.pop();
for (int i = ls[now]; i; i = e[i].next)
{
if (dis[now] + e[i].w < dis[e[i].to])
{
dis[e[i].to] = dis[now] + e[i].w;
if (!v[e[i].to])
{
v[e[i].to] = ;
q.push(e[i].to);
}
}
}
v[now] = ;
}
} int Cmp(arr x, arr y)
{
return x.t < y.t;
} void Init()
{
for (int i = ; i <= cnt; i++)
{
Add(E[i].x, E[i].y, (LL)(E[i].t * E[i].w));
Add(E[i].y, E[i].x, (LL)(E[i].t * E[i].w));
}
} int main()
{
freopen("running.in", "r", stdin);
freopen("running.out", "w", stdout);
n = Read(), m = Read();
for (int i = ; i <= m; i++)
E[i].x = Read(), E[i].y = Read(), E[i].t = Read(), E[i].w = Read();
sort(E + , E + m + , Cmp);
S = Read();
T = Read();
Work();
Init();
Spfa();
printf("%d", Ans);
printf(" %lld", dis[T]);
}
JZOJ 5818. 【NOIP提高A组模拟2018.8.15】 做运动的更多相关文章
- [JZOJ5818] 【NOIP提高A组模拟2018.8.15】 做运动
Description 一天,Y 君在测量体重的时候惊讶的发现,由于常年坐在电脑前认真学习,她的体重有了突 飞猛进的增长. 幸好 Y 君现在退役了,她有大量的时间来做运动,她决定每天从教学楼跑到食堂来 ...
- [JZOJ5817] 【NOIP提高A组模拟2018.8.15】 抄代码
Description J 君是机房的红太阳,每次模拟她总是 AK 虐场.然而在 NOIP2117 中,居然出现了另一位 AK 的选手 C 君! 这引起了组委会的怀疑,组委会认为 C 君有抄袭 J 君 ...
- JZOJ 5812. 【NOIP提高A组模拟2018.8.14】 区间
5812. [NOIP提高A组模拟2018.8.14] 区间 (File IO): input:range.in output:range.out Time Limits: 1000 ms Memo ...
- 5820. 【NOIP提高A组模拟2018.8.16】 非法输入(模拟,字符串)
5820. [NOIP提高A组模拟2018.8.16] 非法输入 (File IO): input:aplusb.in output:aplusb.out Time Limits: 1000 ms ...
- [jzoj 5782]【NOIP提高A组模拟2018.8.8】 城市猎人 (并查集按秩合并+复杂度分析)
传送门 Description 有n个城市,标号为1到n,修建道路花费m天,第i天时,若gcd(a,b)=m-i+1,则标号为a的城市和标号为b的城市会建好一条直接相连的道路,有多次询问,每次询问某两 ...
- [jzoj 5781]【NOIP提高A组模拟2018.8.8】秘密通道 (最短路)
传送门 Description 有一副nm的地图,有nm块地,每块是下列四种中的一种: 墙:用#表示,墙有4个面,分别是前面,后面,左面,右面. 起点:用C表示,为主角的起点,是一片空地. 终点:用F ...
- [jzoj 5778]【NOIP提高A组模拟2018.8.8】没有硝烟的战争 (博弈论+dp)
传送门 Description 被污染的灰灰草原上有羊和狼.有N只动物围成一圈,每只动物是羊或狼. 该游戏从其中的一只动物开始,报出[1,K]区间的整数,若上一只动物报出的数是x,下一只动物可以报[x ...
- 【NOIP提高A组模拟2018.8.14】 区间
区间加:差分数组修改 O(n)扫描,负数位置单调不减 #include<iostream> #include<cstring> #include<cstdio> # ...
- [JZOJ5781]【NOIP提高A组模拟2018.8.8】秘密通道
Description 有一副n*m的地图,有n*m块地,每块是下列四种中的一种:墙:用#表示,墙有4个面,分别是前面,后面,左面,右面.起点:用C表示,为主角的起点,是一片空地.终点:用F表示,为主 ...
随机推荐
- linux 编程笔记1 crusher for linux
1.反显示字符crusher #include <stdio.h> int main (int argc, char *argv[]) { printf("\033[7m mor ...
- (转)Linux之split命令详解
Linux之split命令详解 原文:http://m.jb51.net/article/73632.htm Linux split命令用于将一个文件分割成数个,该指令将大文件分割成较小的文件,在默认 ...
- 【Linux】让Ubuntu 支持 GBK等字符集,解决中文乱码
对GBK,GB2312,GB18030字符集的支持是UBUNTU中文乱码的罪魁祸首,其实我们可以在保持UTF-8为默认编码的条件下添加对这几个编码的支持,以解决中文乱码问题. 我想这个问题肯定有其他人 ...
- mybatis使用说明
起步:1.创建一个maven项目工程.2.打开pom.xml配置文件,3.设置源代码编码方式为UTF-8.4.设置编译源代码的JDK版本.最好大于1.6版本.5. 重点--添加Mybatis的相关依赖 ...
- kickstart2019 round_A B. Parcels
思路: 利用了曼哈顿距离和切比雪夫距离之间的转化. 参考: https://blog.csdn.net/Dylan_Frank/article/details/88985444 https://www ...
- [AngularJS] $location 服务简介
参考博客: https://www.cnblogs.com/gaoruixin/p/6070502.html 简介 $location服务解析在浏览器地址栏中的URL(基于window.locati ...
- C# 获取当前文件、文件夹的路径及操作环境变量
一.获取当前文件的路径 1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName 获取模块的完整路径,包 ...
- JS浏览器获取宽高
screen.availHeight is the height the browser's window can have if it is maximized. (including all th ...
- Mac下对PhpStorm主题的添加
大家都知道,作为一个PHPer,PhpStorm是圈内评价较高的一款IDE. 所以,为了有一个更加个性化的coding界面,我们有很多的主题可以使用. phpStorm自带了好几个主题,你可以通过以下 ...
- linux 命令——5 rm(转)
昨天学习了创建文件和目录的命令mkdir ,今天学习一下linux中删除文件和目录的命令: rm命令.rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所 ...