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 ...
随机推荐
- Ubuntu16.04的图形化界面无法启动问题
昨晚在 Ubuntu 下试图安装笔记本触控板的驱动的时候,突然 Ubuntu 的图形化界面不见了,尝试了 Ctrl + Alt + F1.F2.F3...无果,又在一些博客的指导下尝试在命令行使用 s ...
- node服务端口被占用Error listen EADDRINUSE :::3000
Error: listen EADDRINUSE: address already in use :::3000,出现这个报错说明3000端口被占用 解决方法:找到占用该端口的程序,kill杀掉它就可 ...
- mybatis中 keyProperty="id" 的作用
keyProperty="id"的作用是: 一般都是结合数据库自动生成主键来使用,由于是数据库生成的主键, 所以在这个对象持久化到数据库之前是对象中的这个属性是没有属性值的,但是在 ...
- windows查看进程信息
wmic process where caption="java.exe" get processid,caption,commandline /value
- java多线程基础篇第一篇
1.在开始多线程之前,我们先来聊聊计算机的缓存 计算机处理一个程序需要cpu处理器与存储设备的交互.但是在计算机发展的过程中,cpu处理器的处理速度不断提高,而存储设备的读写速度却没有得到与cpu同样 ...
- Python 高级特性之:生成器(generator)和迭代器(Iterator)
前言: 之前学习Python自动化,接触了不少python的学习,对生成器印象尤其深,网上也看了很多介绍,下面主要是这些概念的个人学习整理(如侵删). 正文: 如要创建一个非常大的列表,受到内存限制, ...
- mac 删除文件夹里所有的.svn文件
先用命令行,进入你要删除的文件夹中(./ 为这个文件夹的当前路径,也可以填写绝对路径) 命令行下输入: sudo find ./ -name ".svn" -exec rm -r ...
- flask学习(二)
一.蓝图 作用:给开发者提供目录结构 功能:1.自定义模板.静态文件目录 2.给一类url加前缀 3.给一类url添加before_request 目录结构 from flask_werkzur ...
- 帆软报表(finereport)使用row_number ()进行组内排序
ROW_NUMBER()函数将针对SELECT语句返回的每一行,从1开始编号,赋予其连续的编号.在查询时应用了一个排序标准后,只有通过编号才能够保证其顺序是一致的,当使用ROW_NUMBER函数时,也 ...
- Centos安装Git、DotNet、Docker
1.安装Git yum install git 可通过下面的命令查看Git版本 git --version 2.安装Dotnet sudo yum install libunwind libicu 导 ...