当前位置: 首页 > news >正文

AtCoder Beginner Contest AT_abc395_e ABC395E Flip Edge 题解

题目大意

有向图最短路,可以花钱反转所有边。

思路

注:为了与代码呼应,本文用 K K K 代替原题面中的 X X X,如有不便敬请谅解。

数据范围: N , M ≤ 2 × 1 0 5 N,M \le 2\times 10^5 N,M2×105Dijkstra 能过。

读入:正反边存一个图,标注清楚。

记录当前点: ( x , t ) (x,t) (x,t)。其中 x x x 是节点编号, t = 1 t=1 t=1 时这个点是从正向边过来的, t = 2 t=2 t=2 时相反。每一次,要么顺着 t t t 的方向走(花费 1 1 1 日元),要么反之(花费 K + 1 K+1 K+1 日元,反转费 + 走路费)。

代码实现

Submission #63274095

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;

int n, m, k;
long long dis[200010][10];
int vis[200010][10];

struct edge
{
	int y, t;
} ;

vector<edge> g[200010];

struct node
{
	int x, t;
	long long d;
	
	bool operator < (const node & b) const
	{
		return d > b.d;
	}
} ;

void dijkstra(int s)
{
	priority_queue<node> q;
	memset(dis, 0x3f, sizeof(dis));
	memset(vis, 0, sizeof(vis));
	q.push((node){s, 1, 0});
	dis[s][1] = 0;
	while (q.size())
	{
		int x = q.top().x;
		int t = q.top().t;
		q.pop();
		if (vis[x][t]) continue;
		vis[x][t] = 1;
		for (int i = 0; i < g[x].size(); i++)
		{
			int y = g[x][i].y, tt = g[x][i].t;
			int w = 1; if (tt != t) w += k;
			if (dis[y][tt] > dis[x][t] + w)
			{
				dis[y][tt] = dis[x][t] + w;
				q.push((node){y, tt, dis[y][tt]});
			}
		}
	}
}

int main()
{
	cin >> n >> m >> k;
	for (int i = 1; i <= m; i++)
	{
		int x, y; cin >> x >> y;
		g[x].push_back((edge){y, 1});
		g[y].push_back((edge){x, 2});
	}
	dijkstra(1);
	cout << min(dis[n][1], dis[n][2]) << endl;
	return 0;
}
// 思维难度比 D 低,细节也少,难度大概是黄题
http://www.dtcms.com/a/44727.html

相关文章:

  • PyCharm 环境配置精髓:打造高效 Python 开发的基石
  • 网络空间安全(7)攻防环境搭建
  • 【Groovy】函数、闭包、泛型
  • SpringBoot项目启动报错:PathVariable annotation was empty on param 0.
  • 20250301在chrome中安装CRX猫抓
  • 计算机视觉|ViT详解:打破视觉与语言界限
  • Ruby 数组(Array)
  • Android中使用Robolectric测试点击事件(不需要手机)
  • 卷积神经网络(Convolutional Neural Network,CNN)详细解释(带示例)
  • MySQL 架构与 SQL 执行全流程解析
  • 数据库基础三(MySQL数据库操作)
  • ubuntu防火墙iptables
  • C大调中的A4=440Hz:音乐、物理与认知的交响
  • kubernetes 部署项目
  • 基于javaweb的SpringBoot在线动漫信息平台系统设计和实现(源码+文档+部署讲解)
  • Hive的内置函数
  • 【算法】图论 —— Floyd算法 python
  • Linux 动静态库和_make_进度条(一)
  • 通俗易懂,什么是cache一致性
  • Leetcode-853. Car Fleet [C++][Java]
  • Autosar RTE配置-Port Update配置及使用-基于ETAS工具
  • P8649 [蓝桥杯 2017 省 B] k 倍区间--前缀和--同余定理【蓝桥杯简单题-必开long long】
  • 基于ssm的校园跑腿管理系统+vue
  • 【练习】【贪心】力扣452. 用最少数量的箭引爆气球
  • Hutool - POI:让 Excel 与 Word 操作变得轻而易举
  • 2024年12月中国电子学会青少年软件编程(图形化)等级考试试卷(二级)答案 + 解析
  • C#上位机--关键字
  • 天锐绿盾软件,如何防止企业内部数据泄露?
  • 高频面试题(含笔试高频算法整理)基本总结回顾29
  • [STM32]从零开始的STM32 BSRR、BRR、ODR寄存器讲解