Bumped! 2017 ICPC North American Qualifier Contest (分层建图+dijstra)
题目描述
airline and he’s received a voucher for one free flight between any two destinations he wishes.
He is already planning next year’s trip. He plans to travel by car where necessary, but he may be using his free flight ticket for one leg of the trip. He asked for your help in his planning.
He can provide you a network of cities connected by roads, the amount it costs to buy gas for traveling between pairs of cities, and a list of available flights between some of those cities. Help Peter by finding the minimum amount of money he needs to spend to get from his hometown to next year’s destination!
输入
The first line is followed by m lines, each describing one road. A road description contains three space-separated integers i, j, and c (0 ≤ i, j < n, i 6= j and 0 < c ≤ 50 000), indicating there is a road connecting cities i and j that costs c cents to travel. Roads can be used in either direction for the same cost. All road descriptions are unique.
Each of the following f lines contains a description of an available flight, which consists of two space-separated integers u and v (0 ≤ u, v < n, u 6= v) denoting that a flight from city u to city v is available (though not from v to u unless listed elsewhere). All flight descriptions are unique.
输出
样例输入
8 11 1 0 5
0 1 10
0 2 10
1 2 10
2 6 40
6 7 10
5 6 10
3 5 15
3 6 40
3 4 20
1 4 20
1 3 20
4 7
样例输出
45 题意:n个点,m条双向边,f条单向边,单向边只能用一条,且费用为0,从s到t的最短路。
思路:分层建图,两个图之间用费用为0的单向边连接,跑dijstra
#include<bits/stdc++.h>
using namespace std; typedef long long ll;
const int maxn = ;
const int ad=5e5+;
typedef pair<ll,int>pli;
struct Node
{
int y,val,next;
Node(int y=,int val=,int next=):y(y),val(val),next(next) {}
} node[maxn<<]; int head[ad<<];
int cnt;
int n,m,f,s,t;
void add1(int x,int y,int val)
{
node[++cnt].y=y;
node[cnt].val=val;
node[cnt].next=head[x];
head[x]=cnt;
node[++cnt].y=y+ad;
node[cnt].val=val;
node[cnt].next=head[x+ad];
head[x+ad]=cnt;
} void add2(int x,int y)
{
node[++cnt].y=y+ad;
node[cnt].val=;
node[cnt].next=head[x];
head[x]=cnt;
}
priority_queue<pli,vector<pli>,greater<pli> >que;
bool vis[ad<<];
ll dist[ad<<];
void dijstra()
{
while(!que.empty())
que.pop();
memset(dist,0x3f,sizeof(dist));
memset(vis,,sizeof(vis));
que.push(pli(,s));
while(!que.empty())
{
pli tmp = que.top();
que.pop();
int k = tmp.second;
ll v = tmp.first;
if(vis[k])
continue;
vis[k]=;
dist[k]=v;
for(int i=head[k]; i; i=node[i].next)
{
int to=node[i].y;
if(dist[to] > v+node[i].val)
{
que.push(pli(v+node[i].val,to));
}
}
}
}
int main()
{
scanf("%d%d%d%d%d",&n,&m,&f,&s,&t);
cnt = ;
memset(head,,sizeof(head));
for(int i=; i<=m; i++)
{
int u,v,k;
scanf("%d%d%d",&u,&v,&k);
add1(u,v,k);
add1(v,u,k);
}
for(int i=; i<=f; i++)
{
int u,v;
scanf("%d%d",&u,&v);
add2(u,v);
}
dijstra();
printf("%lld\n",min(dist[t],dist[ad+t]));
}
Bumped! 2017 ICPC North American Qualifier Contest (分层建图+dijstra)的更多相关文章
- ICPC North Central NA Contest 2018
目录 ICPC North Central NA Contest 2018 1. 题目分析 2. 题解 A.Pokegene B.Maximum Subarrays C.Rational Ratio ...
- 【BZOJ-1570】BlueMary的旅行 分层建图 + 最大流
1570: [JSOI2008]Blue Mary的旅行 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 388 Solved: 212[Submit ...
- 2019 ACM/ICPC North America Qualifier G.Research Productivity Index(概率期望dp)
https://open.kattis.com/problems/researchproductivityindex 这道题是考场上没写出来的一道题,今年看看感觉简单到不像话,当时自己对于dp没有什么 ...
- The North American Invitational Programming Contest 2017 题目
NAIPC 2017 Yin and Yang Stones 75.39% 1000ms 262144K A mysterious circular arrangement of black st ...
- The North American Invitational Programming Contest 2018 D. Missing Gnomes
A family of nn gnomes likes to line up for a group picture. Each gnome can be uniquely identified by ...
- The North American Invitational Programming Contest 2018 H. Recovery
Consider an n \times mn×m matrix of ones and zeros. For example, this 4 \times 44×4: \displaystyle \ ...
- The North American Invitational Programming Contest 2018 E. Prefix Free Code
Consider nn initial strings of lower case letters, where no initial string is a prefix of any other ...
- 2018-2019 ICPC, NEERC, Southern Subregional Contest
目录 2018-2019 ICPC, NEERC, Southern Subregional Contest (Codeforces 1070) A.Find a Number(BFS) C.Clou ...
- ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków
ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków Problem A: Rubik’s Rect ...
随机推荐
- netcore项目在Centos部署:nohup和supervisor方式
Centos上部署netcore项目 1 准备工作 在Centos上部署netcore应用程序有两种常用方式:nohup和supervisord,这里简单演示一下这两种部署方式. 首先我们写一个简单的 ...
- JSON使用与类型转换
JSON语法与对象 JSON方法与使用 一.JSON语法与对象 JSON是英文JavaScript Object Notation(JavaScript 对象表示法)的缩写,是存储和交换文本信息的语法 ...
- js 遍历集合删除元素
js 遍历集合删除元素 /** * 有效的方式 - 改变下标,控制遍历 */ for (var i = 0; i < arr.length; i++) { if (...) { arr.spli ...
- oldboy s21day15模块装饰器及其他应用
#!/usr/bin/env python# -*- coding:utf-8 -*- # 1.sys.path.append("/root/mods")的作用?"&qu ...
- 执行python文件
方法一: 通过控制台程序,一行一行执行python程序,输一行执行一行 方法二: 将程序用编辑器编辑好,再在控制台中用路径打开一次性执行(前提是py程序的默认打开方式是python解释器)
- python中opencv的安装
1.得到opencv的安装包: 2.把安装包中的cv.py, cv2.pd放到一个文件夹中,并把这个文件夹放到D:\Anaconda2\Lib\site-packages中: 3.添加新的变量,变量名 ...
- Arduino-函数库和程序架构介绍
(1)声明变量及接口的名称 (2)setup().在程序运行时首先要调用setup()函数[初始化函数],用于初始化变量.设置针脚的输出/输入类型.配置串口.引入类库文件等等.每次Arduino上电或 ...
- 高阶函数(Higher-order function)
变量可以指向函数 以Python内置的求绝对值的函数abs()为例,调用该函数用以下代码: >>> abs(-15) 15 但是,如果只写abs呢? >>> abs ...
- css-reset 代码
最常用 * { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } *:bef ...
- centos 7.2 安装mongodb 3.4.4免编译
/根目录下: 获取命令: wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.4.4.tgz 解压命令: tar zvxf mon ...