之前没学分层图,所以先咕了一下hiahiahia。

学完分层图了回来水写题解了。


这道题要用分层图来解。分层图就是在我们决策的时候,再建k层图,一共k+1层,层与层之间是有向边(这个很重要的),权值为我们进行决策后的代价,而每一层互相连的什么都不变。对于这道题,就像这样建图:

	for(int i = 1; i <= m; i++){
int x , y , z;
cin >> x >> y >> z;
e[x].push_back(make_pair(y , z));
e[y].push_back(make_pair(x , z));
for(int j = 1; j <= k; j++){
e[x + j * n].push_back(make_pair(y + n * (j - 1) , z / 2));
e[x + j * n].push_back(make_pair(y + n * j , z));
e[y + j * n].push_back(make_pair(x + n * (j - 1) , z / 2));
e[y + j * n].push_back(make_pair(x + n * j , z));
}
}

个人习惯,这里用的vector啊qwq。

如果要认真学习下分层图的话建议使用这篇博客哦我太懒了才不会写呢。

下面给出AC代码

#include <bits/stdc++.h>
using namespace std;
int n , m , k , ans = 0x3ffffff;
int dis[10010] , vis[10010];
vector<pair<int , int> > e[10010];
void work1(){
priority_queue<pair<int , int> > q;
memset(dis , 127 , sizeof(dis));
dis[1 + k * n] = 0;
q.push(make_pair(0 , 1 + k * n));
while(!q.empty()){
int x = q.top().second;
q.pop();
if(vis[x]) continue;
vis[x] = 1;
for(int i = 0; i < e[x].size(); i++){
int nx = e[x][i].first , w = e[x][i].second;
if(dis[nx] > dis[x] + w){
dis[nx] = dis[x] + w;
q.push(make_pair(-dis[nx] , nx));
}
}
}
}
int main(){
cin >> n >> m >> k;
for(int i = 1; i <= m; i++){
int x , y , z;
cin >> x >> y >> z;
e[x].push_back(make_pair(y , z));
e[y].push_back(make_pair(x , z));
for(int j = 1; j <= k; j++){
e[x + j * n].push_back(make_pair(y + n * (j - 1) , z / 2));
e[x + j * n].push_back(make_pair(y + n * j , z));
e[y + j * n].push_back(make_pair(x + n * (j - 1) , z / 2));
e[y + j * n].push_back(make_pair(x + n * j , z));
}
}
work1();
for(int i = 0; i <= k; i++) ans = min(dis[n + i * n] , ans);
cout << ans;
return 0;
}
/*
6 9 1
1 2 2
1 4 6
1 3 8
1 5 10
2 4 4
3 5 2
4 5 4
5 6 2
3 6 4
*/

洛谷 P4822 [BJWC2012]冻结的更多相关文章

  1. 洛谷 P4822 [BJWC2012]冻结 题解

    P4822 [BJWC2012]冻结 题目描述 "我要成为魔法少女!" "那么,以灵魂为代价,你希望得到什么?" "我要将有关魔法和奇迹的一切,封印于 ...

  2. [洛谷P4822][BJWC2012]冻结

    题目大意:有一张$n(n\leqslant50)$个点$m(m\leqslant1000)$条边的无向图,可以使得$k$条边使得边权减半,求最短路 题解:分层图最短路 卡点:无 C++ Code: # ...

  3. 洛谷P4822 冻结

    题目描述 "我要成为魔法少女!" "那么,以灵魂为代价,你希望得到什么?" "我要将有关魔法和奇迹的一切,封印于卡片之中„„" 在这个愿望被 ...

  4. P4822 [BJWC2012]冻结

    思路 和p4568类似的分层图最短路 从上一层向下一层连边权/2的边即可 代码 #include <cstdio> #include <algorithm> #include ...

  5. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  6. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  7. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  8. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  9. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

随机推荐

  1. Java 第十一届 蓝桥杯 省模拟赛 最大的元素距离

    在数列 a_1, a_2, -, a_n中,定义两个元素 a_i 和 a_j 的距离为 |i-j|+|a_i-a_j|,即元素下标的距离加上元素值的差的绝对值,其中 |x| 表示 x 的绝对值. 给定 ...

  2. Java实现 蓝桥杯 基础练习 闰年判断

    基础练习 闰年判断 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 给定一个年份,判断这一年是不是闰年. 当以下情况之一满足时,这一年是闰年: 年份是4的倍数而不是1 ...

  3. Java实现 LeetCode 449 序列化和反序列化二叉搜索树

    449. 序列化和反序列化二叉搜索树 序列化是将数据结构或对象转换为一系列位的过程,以便它可以存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后在同一个或另一个计算机环境中重建. 设计一个算法 ...

  4. Java实现 蓝桥杯VIP 算法训练 黑白无常

    算法训练 黑白无常 时间限制:1.0s 内存限制:256.0MB 问题描述 某寝室的同学们在学术完之后准备玩一个游戏:游戏是这样的,每个人头上都被贴了一张白色或者黑色的纸,现在每个人都会说一句话&qu ...

  5. Java实现 蓝桥杯VIP 算法训练 会议中心

    算法训练 会议中心 时间限制:2.0s 内存限制:512.0MB 会议中心 Siruseri政府建造了一座新的会议中心.许多公司对租借会议中心的会堂很感兴趣,他们希望能够在里面举行会议. 对于一个客户 ...

  6. Java实现 蓝桥杯 算法训练 数据交换

    试题 算法训练 数据交换 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 编写一个程序,输入两个整数,分别存放在变量x和y当中,然后使用自己定义的函数swap来交换这两个变量的值. ...

  7. Java实现 蓝桥杯 算法提高最小方差生成树

    1 问题描述 给定带权无向图,求出一颗方差最小的生成树. 输入格式 输入多组测试数据.第一行为N,M,依次是点数和边数.接下来M行,每行三个整数U,V,W,代表连接U,V的边,和权值W.保证图连通.n ...

  8. JSP+Structs+JDBC+mysql实现的诚欣电子商城

    项目简介 项目来源于:https://github.com/SuperiorNature/Java-Enterprise-electronic-mall 本系统是基于JSP+Structs+JDBC+ ...

  9. Python模拟用户登录场景

    简单模拟登录场景,将已知的用户名及密码固化,通过用户输入内容和已固化的内容比较进行判断用户名和密码是否输入正确. 在用户输入时,将密码隐藏需要导入模块getpass import getpass _u ...

  10. Request 对象的主要方法

    setAttribute(String name,Object):设置名字为 name 的 request 的参数值 getAttribute(String name):返回由 name 指定的属性值 ...