湖南省第十二届大学生计算机程序设计竞赛 F 地铁 多源多汇最短路
1808: 地铁
Description
Bobo 居住在大城市 ICPCCamp。
Input
Output
Sample Input
- 3 3
- 1 2 1 1
- 2 3 2 1
- 1 3 1 1
- 3 3
- 1 2 1 1
- 2 3 2 1
- 1 3 1 10
- 3 2
- 1 2 1 1
- 2 3 1 1
Sample Output
- 1
- 3
- 2
题解:
现在假设i号线在深度i的世界里跑
换线相当于换层
然后换乘站相当于一个垂直通道,拆出一些点放到对应的层里
然后按照深度从小到大连……
你从1楼上到3楼就和你从1楼上到2楼,再从2楼上到3楼是一样的
连边侯跑一发最短路就好了 ,spfa超时
感谢quailty的题解和代码
- #include<cstdio>
- #include<cstring>
- #include<cstdlib>
- #include<cmath>
- #include<iostream>
- #include<algorithm>
- #include<queue>
- using namespace std;
- #pragma comment(linker, "/STACK:102400000,102400000")
- #define ls i<<1
- #define rs ls | 1
- #define mid ((ll+rr)>>1)
- typedef long long LL;
- const LL INF = (1LL<<)-;
- const double Pi = acos(-1.0);
- const int N = 1e5+, M = 1e6+, mod = 1e9+, inf = (<<)-;
- LL dist[N<<];
- int vis[N<<];
- struct Edge
- {
- int a,b,t;
- Edge(int _a=,int _b=,int _t=) : a(_a), b(_b), t(_t) {}
- };
- struct qnode {
- LL v,c;
- qnode(LL _v=,LL _c=) : v(_v), c(_c) {}
- bool operator < (const qnode &r) const
- {
- return c > r.c;
- }
- };
- vector< Edge > tmp[N<<];
- vector< pair<int,int > > G[N<<];
- vector<pair<int ,int > > p[N<<];
- void Add(int u,int v,int w) {
- G[u].push_back(make_pair(v,w));
- G[v].push_back(make_pair(u,w));
- }
- void init() {
- for(int i = ; i < N; ++i) p[i].clear(), tmp[i].clear();
- for(int i = ; i < * N; ++i) G[i].clear();
- }
- void Dij(int n,int u) {
- for(int i = ; i <= n; ++i) dist[i] = INF, vis[i] = ;
- priority_queue<qnode> q;
- for(int i = ; i < p[u].size(); ++i) {
- dist[p[u][i].first] = ;
- q.push(qnode{p[u][i].first,});
- }
- while(!q.empty()) {
- int k = q.top().v;
- q.pop();
- if(vis[k]) continue;
- vis[k] = ;
- for(int i = ; i < G[k].size(); ++i)
- {
- int v = G[k][i].first;
- int c = G[k][i].second;
- if(!vis[v] && dist[v] > dist[k] + c) {
- dist[v] = dist[k] + c;
- q.push(qnode{v,dist[v]});
- }
- }
- }
- }
- int n,m;
- int main() {
- while(scanf("%d%d",&n,&m)!=EOF) {
- init();
- for(int i = ; i <= m; ++i) {
- int a,b,c,t;
- scanf("%d%d%d%d",&a,&b,&c,&t);
- tmp[c].push_back(Edge(a,b,t));
- }
- int tot = ;
- for(int i = ; i < N; ++i) {
- for(int j = ; j < tmp[i].size(); ++j) {
- int v[] = {tmp[i][j].a,tmp[i][j].b}, w = tmp[i][j].t;
- for(int _=;_<;++_){
- int u = v[_];
- if(p[u].empty() || p[u].back().second < i) {
- p[u].push_back(make_pair(++tot,i));
- int s = p[u].size();
- if(s > ) Add(p[u][s-].first,p[u][s-].first,p[u][s-].second-p[u][s-].second);
- }
- }
- Add(p[v[]].back().first,p[v[]].back().first,w);
- }
- }
- Dij(tot,);
- LL ans = INF;
- for(int i = ; i < p[n].size(); ++i)
- ans = min( ans, dist[p[n][i].first]);
- printf("%lld\n",ans);
- }
- return ;
- }
湖南省第十二届大学生计算机程序设计竞赛 F 地铁 多源多汇最短路的更多相关文章
- 2016年湖南省第十二届大学生计算机程序设计竞赛---Parenthesis(线段树求区间最值)
原题链接 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 Description Bobo has a balanced parenthes ...
- 2016年湖南省第十二届大学生计算机程序设计竞赛Problem A 2016 找规律归类
Problem A: 2016 Time Limit: 5 Sec Memory Limit: 128 MB Description 给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) ...
- 湖南省第十二届大学生计算机程序设计竞赛 B 有向无环图 拓扑DP
1804: 有向无环图 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 187 Solved: 80[Submit][Status][Web Board ...
- 湖南省第十二届大学生计算机程序设计竞赛 G Parenthesis
1809: Parenthesis Description Bobo has a balanced parenthesis sequence P=p1 p2…pn of length n and q ...
- 湖南省第十二届大学生计算机程序设计竞赛 A 2016
1803: 2016 Description 给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) 的数量: 1. 1≤a≤n,1≤b≤m; 2. a×b 是 2016 的倍数. In ...
- 【模拟】CSU 1807 最长上升子序列~ (2016湖南省第十二届大学生计算机程序设计竞赛)
题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1807 题目大意: 给你一个长度为N(N<=105)的数列,数列中的0可以被其他数 ...
- 【最短路】【数学】CSU 1806 Toll (2016湖南省第十二届大学生计算机程序设计竞赛)
题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1806 题目大意: N个点M条有向边,给一个时间T(2≤n≤10,1≤m≤n(n-1), ...
- 【树状数组】CSU 1811 Tree Intersection (2016湖南省第十二届大学生计算机程序设计竞赛)
题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1811 题目大意: 一棵树,N(2<=N<=105)个节点,每个节点有一种颜 ...
- 【数学】CSU 1810 Reverse (2016湖南省第十二届大学生计算机程序设计竞赛)
题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1810 题目大意: 一个长度为N的十进制数,R(i,j)表示将第i位到第j位翻转过来后的 ...
随机推荐
- 开源工作流 Bonita BPM (JAVA)
Bonita BPM 开源工作流 Bonita BPM (JAVA) http://www.bonitasoft.com/
- C# 数据库查询总结
首先创建了一个SQL Server数据库作为测试的数据库,建立表并填入测试数据 数据库:SQL Server 数据库名:Blog 表名:Test 注:数据库的连接可以使用“dbl”文件测试,具体使用百 ...
- effective c++ resources
http://www.cnblogs.com/littlethank/archive/2011/12/15/2288787.html http://www.cnblogs.com/liao-xiao- ...
- 【转】.so兼容32位和64位
本文转自:http://blog.csdn.net/fwt336/article/details/51700300 安卓的兼容性是一个很令人头疼的问题,这几天又遇到了,还好还是解决了. 我遇到的问题是 ...
- Unity3D研究院之Prefab里面的Prefab关联问题(转)
转自http://www.xuanyusong.com/archives/3042 最近在做UI部分中遇到了这样的问题,就是Prefab里面预制了Prefab.可是在Unity里面一旦Prefab预制 ...
- python迭代器与iter()函数实例教程
python迭代器与iter()函数实例教程 发布时间:2014-07-16编辑:脚本学堂 本文介绍了python迭代器与iter()函数的用法,Python 的迭代无缝地支持序列对象,而且它还允许程 ...
- Delphi XE5 android 获取网络状态
unit Androidapi.JNI.Network; interface function IsConnected: Boolean; function IsWiFiConnected: Bool ...
- perl 从文件里读出变量无法使用解决办法
最近在写一个perl函数,把test case 放到配置文件里,读出来然后使用system运行. 我的本意是: 配置文件conf ping -c $count $ip #在主程序中定义$ip和$cou ...
- Java for LeetCode 209 Minimum Size Subarray Sum
Given an array of n positive integers and a positive integer s, find the minimal length of a subarra ...
- SAP打印出库单需求
*&---------------------------------------------------------------------* *& Report Z_SD_CKD ...