在一个名叫刀塔的国家里,有一只猛犸正在到处跑着,希望能够用它的长角抛物技能来撞飞别人。已知刀塔国有 N 座城市,城市之间由 M 条道路互相连接,为了拦住这头猛犸,每条道路上设置了 Vi​ 人的团队。

这只猛犸从 S 号城市出发,它可以选择:

  1. 在不重复地经过若干条道路后回到 S 号城市;
  2. 在不重复地经过若干条道路后到达 T 号城市。

猛犸经过一条道路后,就会把路上的人全部撞飞。作为一头爱喝雪碧的仁慈的猛犸,自然希望尽可能的少撞飞人。请你帮忙计算一下在最优的选择下,最少需要撞飞多少人才能够到达目标城市?

输入格式:

输入第一行是四个正整数 N,M,S,T (2≤N≤500,1≤M≤105),表示有 N 个城市,M 条道路,猛犸从 S 号城市出发,可以选择到达 T 号城市。

接下来的 M 行,每行三个正整数 Xi​,Yi​,Vi​ (0≤Vi​≤100),表示从 Xi​ 号城市到 Yi​ 号城市有一条道路,道路上有 Vi​ 人的团队。道路可双向通行,城市编号从 1 开始,两个城市之间最多只有一条道路,且没有一条道路连接相同的城市。

数据保证两种选择里至少有一种是可行的。

输出格式:

输出两行,第一行是两个数字,分别对应上面的两种选择分别最少需要撞飞多少人。如果无论撞飞多少人都无法满足选择要求,则输出 -1

第二行是一个句子,如果第一种(回到原点)的选择比较好,就输出 Win!,否则输出Lose!

输入样例:

5 6 1 5
1 2 1
2 3 2
3 4 3
4 1 5
3 5 4
4 5 1

输出样例:

在这里给出相应的输出。例如:

11 6
Lose!

题意: 有n个点m条边,起点s和终点t,现在猛犸有两种行动路径,一种是从s走到t,一种是从s出发转一圈再回到s,两种行动都不允许重复经过同一条边,问各自最短路是多少。

分析: 对于从s到t的最短路很简单,就是套一个dijkstra板子,对于从s出去再绕一圈回来的情况,其实就相当于从s的某个相邻节点i出发,并且删掉i到s的那条边的情况下从i走到s的最短路,再加上i到s的边权就是这一圈下来从i出发的最短路了,猛犸可能从s的各个相邻点出发,所以需要每个相邻点都处理一遍,也就是跑最多n-1次dijkstra,取一个最小值就是绕圈下的最短路了,时间复杂度为O(n*m*logn),如果不使用堆优化的dijkstra可能会更快。

具体代码如下:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#define inf 0x3f3f3f3f
#define pii pair<int, int>
using namespace std;int n, m, s, t, mn;
vector<pii> g[505];
bool vis[505];
int dis[505];void dijkstra(int s, int type){priority_queue<pii, vector<pii>, greater<pii> >q;dis[s] = 0;q.push(make_pair(dis[s], s));while(q.size()){int now = q.top().second;q.pop();if(vis[now]) continue;vis[now] = true;for(int i = 0; i < g[now].size(); i++){int to = g[now][i].second, w = g[now][i].first;if(type == 1 && now == s && to == ::s) continue;//禁用某条边 if(dis[to] > dis[now]+w){dis[to] = dis[now]+w;q.push(make_pair(dis[to], to));}}}
}signed main()
{ios::sync_with_stdio(0);cin.tie(0);cin >> n >> m >> s >> t;for(int i = 1; i <= n; i++){dis[i] = inf;vis[i] = false; } for(int i = 1; i <= m; i++){int u, v, w;cin >> u >> v >> w;g[u].push_back(make_pair(w, v));g[v].push_back(make_pair(w, u));}dijkstra(s, 0);int temp = dis[t]; int mn = inf;for(int i = 0; i < g[s].size(); i++){int to = g[s][i].second, w = g[s][i].first;for(int j = 1; j <= n; j++){vis[j] = false;dis[j] = inf;}dijkstra(to, 1);mn = min(mn, dis[s]+w);}if(mn != inf) cout << mn << " ";else cout << "-1 ";if(temp != inf) cout << temp;else cout << "-1";cout << endl;if(mn < temp) cout << "Win!";else cout << "Lose!";return 0;
}

[最短路]猛犸不上 Ban 2021RoboCom决赛D相关推荐

  1. 2021 RoboCom 世界机器人开发者大赛-本科组(决赛)7-4猛犸不上 Ban(最短路)

    样例输入: 5 6 1 5 1 2 1 2 3 2 3 4 3 4 1 5 3 5 4 4 5 1 样例输出: 11 6 Lose! 分析:对于第二种选择显然直接跑一边最短路就可以了,这里就不多说了, ...

  2. 2021 RoboCom 世界机器人开发者大赛-本科组(决赛)7-4 猛犸不上 Ban

    输入样例: 5 6 1 5 1 2 1 2 3 2 3 4 3 4 1 5 3 5 4 4 5 1 输出样例: 在这里给出相应的输出.例如: 11 6 Lose! 解题思路:对于第二种情况直接以s为起 ...

  3. 随笔-猛犸不上ban

  4. 猛犸不上班--2021RoboCom决赛补题

    题目链接: 猛犸不上 Ban 题意: 有n个城市,m条路,每条路上有w个人. 一只猛犸从 S 号城市出发,它有两种选择: 在不重复地经过若干条道路后回到 S 号城市: 在不重复地经过若干条道路后到达  ...

  5. 【bzoj2324】[ZJOI2011]营救皮卡丘 最短路-Floyd+有上下界费用流

    原文地址:http://www.cnblogs.com/GXZlegend/p/6832504.html 题目描述 皮卡丘被火箭队用邪恶的计谋抢走了!这三个坏家伙还给小智留下了赤果果的挑衅!为了皮卡丘 ...

  6. Codeforces Roun d #621 (Div. 1 + Div. 2) D. Cow and Fields 最短路+贪心 图上特殊点加边使最短路最大

    题目链接:https://codeforces.ml/contest/1307/problem/D 题目大意: 有一个无向图n个点m条边,其中有k个特殊点.现在让你在两个特殊点之间连一条边.让1到n的 ...

  7. 2021 RoboCom 世界机器人开发者大赛-本科组(决赛)题解

    7-1 绿地围栏 (20 分) 市政规划了一块绿地,需要采购一批围栏将绿地围起来. 为了简单起见,我们假设绿地的形状是个封闭连通的规则多边形,即所有边都是互相垂直或平行的,并且没有交叉的十字边.我们指 ...

  8. 图论 —— 最短路 —— Bellman-Ford 算法与 SPFA

    [概述] Bellman-Ford算法适用于计算单源最短路径,即:只能计算起点只有一个的情况. 其最大特点是可以处理存在负边权的情况,但无法处理存在负权回路的情况. 其时间复杂度为:O(V*E),其中 ...

  9. 大数据平台之初体验 | 网易猛犸 | 数据仓库、调度系统、数据质量、离线与实时计算应有尽有。

    一句话介绍 一站式大数据管理和应用开发平台,具有敏捷易用,成熟稳定,安全可靠,开放灵活的特点. 平台架构 产品功能 1.大规模数据存储与计算 支持不同的存储方案和计算方案,灵活满足客户的需求.支持 H ...

最新文章

  1. 数据库--循环语句:loop exit when/ end loop
  2. 这个ERP的冬天好冷啊!
  3. 一条代码解决各种IE浏览器兼容性问题
  4. 音视频技术开发周刊 | 206
  5. 电脑f2还原系统步骤_使用冰点还原电脑每次重启都会还原,打造一个百毒不侵的系统...
  6. 将Teams app升级到net6
  7. jQuery 对HTML的操作(二)
  8. 如何动态在maven插件中加载项目及第三方类
  9. 20165203《Java程序设计》第四周学习总结
  10. 更改后缀为.dex文件为.odex文件 让你的程序瘦身 运行更稳定
  11. php mongodb获取指定字段,Mongodb 根据子文档的某个特定字段排序的问题
  12. AJAX 框架Jquery的使用方法
  13. ResNet 6大变体对比
  14. 测试用例的定义,测试用例模板,测试用例的作用,测试用例编写注意事项
  15. SQL 插入时直接插入当前时间
  16. C语言基础学习——基本数据类型(float型)
  17. Chrome下载文件,文件名出现乱码解决
  18. You are what you read 笔记
  19. Python中面向对象(类,对象,魔法,打印)
  20. JDBC之CallableStatement执行存储过程

热门文章

  1. ps笔刷:肮脏污渍photoshop笔刷集
  2. 【美盘趋势】3.30黄金晚盘能否拉升向上?原油走势及操作策略
  3. 2021年5月5日大学化学无机原理(11)—氧化还原反应,原电池,电极电势,能斯特方程。
  4. 【面经分享】想进外企你应该知道的七大基本面试知识
  5. Android界面刷新
  6. 科学-猜想与反驳(卡尔.波普尔)
  7. Pom Downloading Error解决办法
  8. 联想笔记本“电源已连接,但未充电”解决方案
  9. 树莓派【二、RGB_LED灯实验】
  10. Gut | 微生物胆盐水解酶在粪菌移植治疗复发性艰难梭菌感染中的作用