CODEVS 1021 玛丽卡 最短路模板题
来源:互联网 发布:深锋网络 编辑:程序博客网 时间:2024/06/04 17:42
这道题就是一个最短路模板题,SPFA,Dijkstra都可以过。
思路:先求出n到1的最短路,记录路径,之后分别把路径上的每一条边删去再求最短路,对这些之后求出最短路取max就是答案了。
思路想明白了就好说,一开始我想的是依次删除所有的边,求最短路取max,这么做总是有几个点会T,之后改成Dijkstra,还是T,弱渣的我丝毫没有想到是思路错了TAT。
#include <cstdio>#include <vector>#include <queue>#include <cstring>#include <algorithm>using namespace std;int n, m, ans, d[1001], fa[1001], f[1001];bool vis[1001];vector <int> G[1001];struct edge{int u, v, w;}E[500005];struct node{int d, num;bool operator < (node i)const{return d > i.d;}}t;priority_queue <node> q;void dijkstra(int no){memset(d, 0x7f, sizeof d);memset(vis, 0, sizeof vis);while(q.size()) q.pop();d[n] = 0;t.num = n, t.d = 0;q.push(t);while(q.size()){t = q.top(); q.pop();int u = t.num;if(vis[u]) continue;vis[u] = 1;for(int j = 0; j < G[u].size(); j++){int e = G[u][j], v = E[e].v == u ? E[e].u : E[e].v, w = E[e].w;if(vis[v] || e == no) continue;if(d[v] > d[u]+w) {d[v] = d[u] + w;t.num = v, t.d = d[v];q.push(t);if(!no) fa[v] = u, f[v] = e;}}}ans = max(ans, d[1]);}int main(){scanf("%d %d", &n, &m);for(int i = 1; i <= m; i++){scanf("%d %d %d", &E[i].u, &E[i].v, &E[i].w);G[E[i].u].push_back(i); G[E[i].v].push_back(i);}dijkstra(0);for(int no = 1; no; no = fa[no]) dijkstra(f[no]);printf("%d", ans);}
0 0
- CODEVS 1021 玛丽卡 最短路模板题
- codevs 1021 玛丽卡 图论:最短路
- codevs 玛丽卡(最短路路径记录)
- 【最短路】玛丽卡
- Codevs 1021 玛丽卡
- Codevs 1021 玛丽卡
- codevs 1021 玛丽卡
- 【codevs 1021】玛丽卡
- 【codevs 1021】玛丽卡
- codevs 1021 玛丽卡
- codevs 1021 玛丽卡
- CODEVS 1021 玛丽卡
- Codevs 1021 玛丽卡
- 【codevs 1021】玛丽卡
- codevs 1021 玛丽卡
- 【codevs 1021】玛丽卡
- 【最短路】CODE[VS] 1021 玛丽卡 ( Dijkstra )
- [练习][洛谷1186]最短路 玛丽卡
- run模式可以启动,debug模式无法启动
- JPA 实体映射
- [leetcode]Majority Element C语言
- POJ 3122 Pie(二分)
- Scheme 语言概要(上)
- CODEVS 1021 玛丽卡 最短路模板题
- 手机淘宝构架演化实践
- uboot 引导kernel杂谈
- 【Qt】QThread::moveToThread
- Scheme 语言概要(下)
- 鼠标马赛克图像部分区域
- 黑马程序员--对象的存储细节
- android获取手机ip地址wifi状态与非wifi状态
- hive配置问题异常 Relative path in absolute URI