当前位置: 首页 > 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 低,细节也少,难度大概是黄题

相关文章:

  • 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]
  • 网站建设与运营答案/免费建立个人网站官网
  • 海安网站建设公司/软文网站模板
  • 个人网站的搭建步骤/茶叶seo网站推广与优化方案
  • 恶意网站是怎么实现的/下载百度语音导航地图安装
  • 百城建设提质工程网站/企业网站建设需求分析
  • 关于医院建设的政府机构网站/抓取关键词的软件