首页 > 其他分享 >【经典例题】P6822 [PA2012] Tax

【经典例题】P6822 [PA2012] Tax

时间:2023-07-02 16:55:21浏览次数:41  
标签:int Tax pb define P6822 例题 prv id dis

考虑边拆成点。然后经过这些点的路径就是答案的路径。

考虑直接起点,终点连边。

然后我们考虑转移两条出边入边的过程。是 \((a, b) \to (b, c)\) 考虑到反向边是一致的所以可以 \((b, a) \to (b, c)\)。这个启发我们反向边之间可以连一条 \(w\) 的边。

然后我们考虑按 w 排序,然后 \(i \to i + 1\) 连一个差值,\(i + 1 \to i\) 连一个 0 边就做完了。

我们发现取我们可以在一个点中不断转移差值,这个就是取 max 的过程,然后通过反向边走出去,这个建图真的牛子的。

#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l; i <= r; i ++)
#define per(i, r, l) for (int i = r; i >= l; i --)
#define pb push_back
#define lc u << 1
#define rc u << 1 | 1
#define int long long

using namespace std;

const int _ = 1e5 + 5, __ = 2e5 + 5, mod = 1e9 + 7;

int n, m, dis[__], s = 0, t = 1;

struct EDGE { 
	int v, w, id; 
	bool operator < (const EDGE & x) const { return w < x.w; }
} ;
vector <EDGE> e[_], g[_];
void adde (int u, int v, int w, int id) { e[u].pb({v, w, id}); }
void addg (int u, int v, int w) { g[u].pb({v, w, 114514}); }

struct node {
	int u, d;
	bool operator < (const node & x) const { return d > x.d; }
} ;
priority_queue <node> q;

void dijkstra (int st, int ed) {
	memset(dis, 0x3f, sizeof(dis)), dis[st] = 0;
	q.push({st, 0});
	while (! q.empty()) {
		int u = q.top().u, d = q.top().d;
		q.pop(); if (d != dis[u]) continue ; 
		for (auto & [v, w, id] : g[u]) 
			if (dis[v] > d + w)	dis[v] = d + w, q.push({v, dis[v]});
	}
	cout << dis[ed]; return ;
}
signed main () {
	// freopen(".in", "r", stdin);
	// freopen(".out", "w", stdout);
	ios :: sync_with_stdio(0);
 	cin >> n >> m;
 	rep(i, 1, m) {
 		int u, v, w;
 		cin >> u >> v >> w;
 		adde(u, v, w, i << 1), adde(v, u, w, i << 1 | 1);
	}
	rep(u, 1, n) {
		if (e[u].empty()) continue ;
		sort(e[u].begin(), e[u].end());
		for (auto & [v, w, id] : e[u]) {
			addg(id, id ^ 1, w);
			if (u == 1) addg(s, id, w);
			if (v == n) addg(id, t, w);
		}
		auto it = e[u].begin();
		for (++ it; it != e[u].end(); it ++) {
			auto prv = (it - 1);
			addg(it -> id, prv -> id, 0), addg(prv -> id, it -> id, it -> w - prv -> w);
		}
	}
	dijkstra(s, t);
	return 0;
}

标签:int,Tax,pb,define,P6822,例题,prv,id,dis
From: https://www.cnblogs.com/Custlo/p/17520974.html

相关文章

  • 51.pyinstaller打包后,打开exe程序提示SyntaxError: Non-UTF-8 code starting with '\
    最后开发了一款小工具,然后确定一切测试没有问题,想通过pyinstaller将其打包成exe,像类似的打包以前也经常打包的,复杂一点的也都是打包成功的,但这里感觉程序很简单,打包居然出现了以下错误。我的python版本是3.8.9,然后pyinstaller版本是5.9.0,不知道会不会是版本不兼容的问题,看网上哪......
  • 对顶堆例题
    例题:洛谷中位数以下题解来自于https://www.luogu.com.cn/blog/SeanMoe/solution-p1168使用两个堆,大根堆维护较小的值,小根堆维护较大的值即小根堆的堆顶是较大的数中最小的,大根堆的堆顶是较小的数中最大的将大于大根堆堆顶的数(比所有大根堆中的元素都大)的数放入小根堆,小于等于......
  • java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check t
    问题报错代码org.apache.ibatis.exceptions.PersistenceException:###Errorqueryingdatabase.Cause:java.sql.SQLSyntaxErrorException:YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntax......
  • 【Node】node 报错:tagOffsetsMap[tag] ??= [];...SyntaxError: Unexpected token ,‘??=
    安装的node版本不支持空值赋值运算符(??=)更换合适的node版本就行更多支持请在node.green上查看各种语法支持的版本参考文章NodeJS中的空合并赋值运算符(??=)......
  • centos7-datax和datax-web安装以及安装中问题的解决
    一、下载这些软件(见) 系统变量设置(安装maven和jdk略)vi /etc/profileJAVA_HOME=/usr/local/jdk1.8.0_40CLASSPATH=$JAVA_HOME/lib/PATH=$PATH:$JAVA_HOME/binDATAX_HOME=/usr/local/dataxPATH=$PATH:$DATAX_HOME/bin exportMAVEN_HOME=/usr/local/apache-maven-3......
  • DataX入门教学
    B站学习网址:https://www.bilibili.com/video/BV1H44y1x76X/?p=5&spm_id_from=pageDriver&vd_source=5fcc0d714ffdcc521fdaa5ef49391aefWindows下安装DataX以及Data-Web1、环境1.1:本地安装好jdk、maven、python的基础环境 java版本:java20.0.12023-04-18 maven:Apa......
  • DataX介绍及应用实例
    一、DataX简介DataX是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS等各种异构数据源之间高效的数据同步功能。DataX本身作为数据同步框架,将不同数据源的......
  • DataX在Windows上实现Mysql到Mysql同步数据以及配置多个job/多个表同步定时执行bat
    场景DataX-阿里开源离线同步工具在Windows上实现Sqlserver到Mysql全量同步和增量同步:DataX-阿里开源离线同步工具在Windows上实现Sqlserver到Mysql全量同步和增量同步_sqlserver数据同步工具_霸道流DataX-在Windows上实现postgresql同步数据到mysql:DataX-在Windows上实现postgres......
  • 解决SyntaxError: Generator expression must be parenthesized
    在创建django的app时出现问题: 是因为python3.8与django1.11不兼容。解决办法,打开"F:\python\lib\site-packages\django\contrib\admin\widgets.py"这个文件,去掉'%s=%s'%(k,v)fork,vinparams.items(), 这一句末尾的逗号即可。 ......
  • DataX在Windows上实现Mysql到Mysql同步数据以及配置多个job/多个表同步定时执行bat
    场景DataX-阿里开源离线同步工具在Windows上实现Sqlserver到Mysql全量同步和增量同步:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130330353DataX-在Windows上实现postgresql同步数据到mysql:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130......