题意:有 n 个点,每个点有它所在的层数,最多有 n 层,相邻两层之间的点可以互相到达,消耗 c (但同一层并不能直接到达),然后还有一些额外的路径,可以在两点间互相到达,并且消耗一定费用。问 1 点到 n 点的最小花费

将每一层拆成两个点,分别为进入层和出发层,然后相邻层的出发层可以指向进入层,花费 c,每个点可以到达其出发层,而进入层可以到达该点,花费 0 ,最后建立其余双向边,最短路

 #include<stdio.h>
#include<string.h>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
typedef pair<int,int> pii; struct cmp{
bool operator()(pii a,pii b){
return a.first>b.first;
}
}; int head[],point[],val[],nxt[],size;
int n,dist[]; void add(int a,int b,int v){
point[size]=b;
val[size]=v;
nxt[size]=head[a];
head[a]=size++;
} void dij(){
int i;
memset(dist,-,sizeof(dist));
dist[]=;
priority_queue<pii,vector<pii>,cmp>q;
q.push(make_pair(dist[],));
while(!q.empty()){
pii u=q.top();
q.pop();
if(u.first>dist[u.second])continue;
for(i=head[u.second];~i;i=nxt[i]){
int j=point[i],v=u.first+val[i];
if(dist[j]==-||dist[j]>v){
dist[j]=v;
q.push(make_pair(dist[j],j));
}
}
}
printf("%d\n",dist[n]);
} int main(){
int t;
while(scanf("%d",&t)!=EOF){
for(int q=;q<=t;q++){
printf("Case #%d: ",q);
memset(head,-,sizeof(head));
size=;
int m,c;
scanf("%d%d%d",&n,&m,&c);
int i,j;
for(i=;i<=n;i++){
int l;
scanf("%d",&l);
add(i,l+n,);
add(l+n+n,i,);
}
for(i=;i<n;i++){
add(i+n,i+n+n+,c);
add(i+n+,i+n+n,c);
}
for(i=;i<=m;i++){
int a,b,v;
scanf("%d%d%d",&a,&b,&v);
add(a,b,v);
add(b,a,v);
}
dij();
}
}
return ;
}

hdu4725 拆点+最短路的更多相关文章

  1. 【NOIP2017】逛公园 拆点最短路+拓扑(记忆化搜索

    题目描述 策策同学特别喜欢逛公园.公园可以看成一张N个点M条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,N号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花的时间. 策 ...

  2. UVa1078 Steam Roller——拆点+最短路

    题目链接 思路 把每个点拆成\(5\)个点\(id(x,y),id(x,y)+n,id(x,y)+2*n,id(x,y)+3*n,id(x,y)+4*n\),分别表示到这个点时的方向为上,右,下,左和 ...

  3. Atcoder Beginner Contest 164 E Two Currencies(拆点+最短路)

    题目链接 题意:有 \(n\) 个城市,它们由 \(m\) 条双向道路连接,保证它们能够彼此到达.第 \(i\) 条道路连接 \(u_i,v_i\),需要花费 \(x_i\) 个银币,耗费 \(t_i ...

  4. Shortest Path Codeforces - 59E || 洛谷P1811 最短路_NOI导刊2011提高(01)

    https://codeforces.com/contest/59/problem/E 原来以为不会..看了题解发现貌似自己其实是会的? 就是拆点最短路..拆成n^2个点,每个点用(i,j)表示,表示 ...

  5. XJOI网上同步训练DAY6 T1

    思路:考试的时候直接想出来了,又有点担心复杂度,不过还是打了,居然是直接A掉,开心啊. 我们发现,Ai<=7,这一定是很重要的条件,我们考虑状态压缩,去枚举路径中出现了哪些数字,然后我们把原来n ...

  6. AtCoder Regular Contest

    一句话题解 因为上篇AGC的写的有点长……估计这篇也短不了所以放个一句话题解方便查阅啥的吧QwQ 具体的题意代码题解还是往下翻…… ARC 058 D:简单容斥计数. E:用二进制表示放的数字,然后状 ...

  7. NOIP练习赛题目5

    小象涂色 难度级别:C: 运行时间限制:1000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 小象喜欢为箱子涂色.小象现在有c种颜色,编号为0~c-1:还有n个箱 ...

  8. [Atcoder Regular Contest 061] Tutorial

    Link: ARC061 传送门 C: 暴力$dfs$就好了 #include <bits/stdc++.h> using namespace std; typedef long long ...

  9. test20190526 Noip 模拟赛 4

    调整(tweak) [问题描述] 已给定一个 N个点 M条边的有向图,点编号为1到N,第i条边为 (ui,vi), 权值为 wi. 你可以进行一次操作,使得任意条边的权值变成非负整数.要求进行尽量少的 ...

随机推荐

  1. dataTable/dataSet转换成Json格式

    using System.Text;using System.Collections.Generic; 1)dataTable转Json(表格有名称:dt.TableName) public stat ...

  2. [C/C++]C++标准

    本文若如特别说明都引于ISO/IEC 14882:2011 7.声明(Declarations) 声明序列(declaration-seq):    声明(declaration)    声明序列(d ...

  3. CSS引入方式的区别详解

    在web前端开发中,CSS是一种用来表现HTML或XML等文件样式的语言.很多处于web前端初学阶段的朋友,很多人都不知道CSS引入方式存在三种方法,css引入方式分别为标签内联书写.页面头部书写.外 ...

  4. 云计算平台简介(App Engine)

    云计算平台简介(App Engine)     1   简介 App Engine: 应用程序引擎,是托管网络应用程序的云计算平台. 1.1  什么是云 云计算通常简称为“云”,是一种通过 Inter ...

  5. ListView Optimization

    ListView仅仅缓存了可视范围内的View,随后的滚动都是对这些View进行数据更新 1.static inner class ViewHolder and setTag() 2.use conv ...

  6. linux常用命令:2权限管理命令

    权限管理命令 1.权限管理命令:chmod 命令名:chmod 命令英文原意:change the permissions mode of a file 命令所在路径:/bin/chmod 执行权限: ...

  7. 使用httputils上传图片到服务器

    //创建httpUtils对象 HttpUtils mRegHttpUtils = new HttpUtils(); //图片路径 String path = "/sdcard/Downlo ...

  8. TableView--通讯录--开篇

    一,需求图:

  9. HDU5534--Partial Tree (完全背包)

    点击打开链接 思路:总度数为2n-2,由于每个节点都至少要有1个度,所以可以看做把剩余n-2个点放入n个节点的背包问题.dp[i]表示放入i个度后的最大值 #include<cstdio> ...

  10. 企业级的App发布流程

    1.先注册企业级开发证书http://blog.sina.com.cn/s/blog_6cad9db90102uy0s.html2.开发 企业流程http://blog.csdn.net/pang04 ...