【luogu P1186】玛丽卡
https://www.luogu.org/problem/show?pid=1186
考虑暴力,枚举图上每一条边删去后跑Dijkstra,取M次的最大值。
仔细想想就会发现删除最短路以外的边对最短路毫无影响,于是先跑出最短路,然后枚举最短路上的每一条边删去后跑Dijkstra,取这几次的最大值。
#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#define maxn 1005
using namespace std;
const int inf = 0x3f3f3f3f;
int n, m;
struct edge
{
int from, to, weight;
};
vector<edge> e;
vector<int> g[maxn]; bool known[maxn];
int dist[maxn], front[maxn];
typedef pair<int, int> pin;
priority_queue<pin, vector<pin>, greater<pin>> pq;
void dijkstra()
{
for (int i = ; i <= n; ++i)
{
dist[i] = inf;
known[i] = false;
front[i] = -;
}
while (!pq.empty())
pq.pop();
dist[] = ;
pq.push(make_pair(dist[], ));
while (!pq.empty() && !known[n])
{
int x = pq.top().second;
pq.pop();
if (known[x])
continue;
known[x] = true;
for (int i = ; i < g[x].size(); i++)
{
edge &ed = e[g[x][i]];
if (!known[ed.to] && dist[ed.to] > dist[x] + ed.weight)
{
dist[ed.to] = dist[x] + ed.weight;
front[ed.to] = g[x][i];
pq.push(make_pair(dist[ed.to], ed.to));
}
}
}
}
vector<int> path; int main()
{
cin >> n >> m;
int u, v, w;
for (int i = ; i <= m; i++)
{
cin >> u >> v >> w;
e.push_back((edge){u, v, w});
g[u].push_back(e.size() - );
e.push_back((edge){v, u, w});
g[v].push_back(e.size() - );
}
dijkstra();
for (int i = front[n]; i != -; i = front[e[i].from])
path.push_back(i); int ans = dist[n];
for (int i = ; i < path.size(); i++)
{
w = e[path[i]].weight;
e[path[i]].weight = e[path[i] ^ ].weight = inf;
dijkstra();
if (dist[n] != inf)
ans = max(ans, dist[n]);
e[path[i]].weight = e[path[i] ^ ].weight = w;
}
cout << ans;
return ;
}
【luogu P1186】玛丽卡的更多相关文章
- luogu P1186 玛丽卡
题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道从一个城市到另一个城 ...
- Luogu P1186 玛丽卡 【最短路】By cellur925
题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道从一个城市到另一个城 ...
- 【luogu P1186 玛丽卡】 题解
题目链接:https://www.luogu.org/problemnew/show/P1186 邻接表开大开小真的奇妙,毒瘤玩意,再您妈的见. #include <queue> #inc ...
- 洛谷P1186 玛丽卡 spfa+删边
洛谷P1186 玛丽卡http://blog.csdn.net/huihao123456/article/details/73414139题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. ...
- 洛谷——P1186 玛丽卡
P1186 玛丽卡 题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道 ...
- 洛谷 P1186 玛丽卡
P1186 玛丽卡 题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道 ...
- 洛谷—— P1186 玛丽卡
https://www.luogu.org/problem/show?pid=1186 题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长 ...
- P1186 玛丽卡
题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道从一个城市到另一个城 ...
- 洛谷P1186 玛丽卡
题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道从一个城市到另一个城 ...
- 洛谷P1186玛丽卡
传送门啦 先跑一遍最短路,将最短路的路径记录下来,然后枚举每一条最短路的边,将其断掉,记录此时的1-n的时间,取其中最大的一个时间即为所求. (通过 $ cut[][] $ 和 $ f[] $ 进行操 ...
随机推荐
- CSS浮动(Float)(二)
1.什么是浮动:在我们布局的时用到的一种技术,能够方便我们进行布局,通过让元素浮动,我们可以使元素在水平上左右移动,再通过margin属性调整位置 2.浮动的原理:使当前元素脱离普通流,相当于浮动起来 ...
- Problem C: 求个最大值
class MaxValue { public: vector<int> vec; void append(int n) { vec.push_back(n); } int getMax( ...
- Spring学习日志之Bean的装配
Spring容器负责创建应用程序中的bean并通过依赖注入来协调这些对象之间的关系.但是,作为开发人员,要告诉Spring需要创建哪些bean并且如何将其装配在一起.当描述bean如何装配时,Spri ...
- linux-mkdir
mkdir mkdir : 可以用来创建目录,如果不加创建路径即在本路径下创建一个新的指定的目录,否则即在给出的路径下创建目录. 目录创建:目录名尽量见名知意,根据不同需要分层创建,尽量避免在同一目录 ...
- Spark之MapReduce原理
参考http://www.cnblogs.com/wuyudong/p/mapreduce-principle.html MapReduce 我们来拆开看: Mapping(映射)对集合里的每个目 ...
- platform 收集linux/windows操作系统信息
调用python的platform模块 #!/usr/bin/evn python #_*_ coding:utf-8 -*- import platform print "######## ...
- Mybatis查询时报 Bad format for Time '454:54:54' in column 6 异常
报 Bad format for Time '454:54:54' in column 6 解决方案:1. 查询实体类和.xml数据是否相对应 2. 查询sql是否正确 3. 查看表的设计,是 ...
- mysql数据库常用命令笔记
连接数据库:mysql -h localhost -u root -p 000000 退出:exit; \q; quit; SET foreign_key_checks = 0; 禁用外键 ...
- Javascript日期类型的妙用
http://heeroluo.net/Article/Detail/110 获取某个月份的天数 相信大家读小学的时候就知道一年十二个月各有多少天了,这里面有个特殊的存在——2月.闰年的2月有29天, ...
- KMP - LeetCode #459 Repeated Substring Pattern
复习一下KMP算法 KMP的主要思想是利用字符串自身的前缀后缀的对称性,来构建next数组,从而实现用接近O(N)的时间复杂度完成字符串的匹配 对于一个字符串str,next[j] = k 表示满足s ...