H - transaction transaction transaction
https://vjudge.net/contest/184514#problem/H
题意:
一个商人为了赚钱,在城市之间倒卖商品。有n个城市,每个城市之间有且只有一条无向边连通。给出n个城市的货物的价格,比如A城市是a元,B城市是b元,那么在A买在B卖,赚的钱就是b - a,反之就是 a - b。商人走每条路也需要一定的花费。现在他需要选择某两个城市进行货物的倒卖,问他能获得的最大利润是多少。
思路:
建图的方式非常妙。我们把从A到B的边的权值定义为b - a - v(v为边的权值),从B到A的边的权值定义为a - b - v。依据这个从A到B再到C,就是b - a - v1 加上 c - b - v2,加起来就是c - a - v1 - v2,这样我们就可表示从任意城市到任意城市的距离了。
现在我们要求的就是任意两个城市之间的最大距离。树上最长路并不擅长,所以考虑用最短路求法进行求解。加一个超级源点和超级汇点,跑一遍最短路,就可以了,但是我们求的是最长路。。所以把边取反求最短路就ok了,开始用dijstra跑崩了,忘记了dij不能处理有负权边的图,所以跑了一遍spfa就过了。
这题的主要收获是建图,关键是抵消中间城市对结果的影响。
代码:
#include <stdio.h>
#include <string.h>
#include <vector>
#include <queue>
using namespace std; const int inf = 0x3f3f3f3f; struct edge
{
int from,to;
int cost;
}; vector<edge> edges;
vector<int> v[];
int nodev[];
int dis[];
bool vis[]; void adde(int from,int to,int cost)
{
edge tmp; tmp.from = from;
tmp.to = to;
tmp.cost = -cost; edges.push_back(tmp); int sz = edges.size(); v[from].push_back(sz-);
} void init(int n)
{
for (int i = ;i <= n;i++) v[i].clear(); edges.clear();
} void spfa(void)
{
memset(vis,,sizeof(vis)); memset(dis,inf,sizeof(dis)); queue<int> q; q.push(); dis[] = ; vis[] = ; while (!q.empty())
{
int u = q.front(); q.pop(); vis[u] = ; for (int i = ;i < v[u].size();i++)
{
int id = v[u][i]; int to = edges[id].to; if (dis[to] > dis[u] + edges[id].cost)
{
dis[to] = dis[u] + edges[id].cost; if (!vis[to])
{
q.push(to);
vis[to] = ;
}
}
} }
} int main()
{
int t; scanf("%d",&t); while (t--)
{
int n; scanf("%d",&n); init(n+); for (int i = ;i <= n;i++)
{
scanf("%d",&nodev[i]);
} for (int i = ;i <= n - ;i++)
{
int x,y,z; scanf("%d%d%d",&x,&y,&z); adde(x,y,nodev[y] - nodev[x] - z);
adde(y,x,nodev[x] - nodev[y] - z);
} for (int i = ;i <= n;i++)
{
adde(,i,);
adde(i,n+,);
} spfa(); printf("%d\n",-dis[n+]); //for (int i = 0;i <= n + 1;i++) printf("%d\n",dis[i]);
} return ;
}
H - transaction transaction transaction的更多相关文章
- Could not commit JPA transaction RollbackException: Transaction marked as rollbackOnly
项目调试时,报以下错误: org.springframework.transaction.TransactionSystemException: Could not commit JPA transa ...
- 解决Could not commit JPA transaction RollbackException: Transaction marked as rollbackOnly
项目测试发生问题,方法正常结束,但是报了 Could not commit JPA transaction; nested exception is javax.persistence.Rollbac ...
- 记一次org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only异常
@Transactional(rollbackFor = Exception.class) @Overridepublic DubboResult<Boolean> productAddO ...
- mybatis sqlsession与sqlsquery、transaction、connection
sqlsession和connection 一个sqlsession一般对应一个connection,并且mybatis默认每次获取session都会开启一个事务,且不自动提交事务.如果更新操作完成后 ...
- [WCF编程]12.事务:Transaction类
一.概述 .NET2.0在命名空间System.Transactions下提供了Transaction类,它表示所有.NET事务管理器使用的事务. [Serializable]public class ...
- 事务操作(BEGIN/COMMIT/ROLLBACK/SAVE TRANSACTION)
BEGIN TRANSACTION 标记一个显式本地事务的起始点. BEGIN TRANSACTION 使 @@TRANCOUNT 按 1 递增. BEGIN TRANSACTION 代表一点,由连接 ...
- Transaction Save Point (SET XACT_ABORT { ON | OFF })
ref:http://blog.csdn.net/wym3587/article/details/6940630 ref:http://www.cnblogs.com/jiajiayuan/archi ...
- 事务BEGIN TRANSACTION
事务(Transaction)是并发控制的基本单位.所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位.例如,银行转账工作:从一个账号扣款并使另一个账号增款,这 ...
- spring Transaction Propagation 事务传播
spring Transaction中有一个很重要的属性:Propagation.主要用来配置当前需要执行的方法,与当前是否有transaction之间的关系. 我晓得有点儿抽象,这也是为什么我想要写 ...
- Flume-NG中Transaction并发性探究
我们曾经在Flume-NG中的Channel与Transaction关系(原创)这篇文章中说了channel和Transaction的关系,但是在source和sink中都会使用Transaction ...
随机推荐
- InnoDB关键特性之刷新邻接页-异步IO
Flush neighbor page 1.工作原理 2.参数控制 AIO 1.开启异步IO 一.刷新邻接页功能 1.工作原理 当刷新一个脏页时,innodb存储引擎会检测该页所在区(extent)的 ...
- C# 接口基础学习
什么是接口 接口,在表面上是由几个没有主体代码的方法.属性.索引器.事件,或者它们的组合的集合体,有唯一的名称,可以被类或结构或者其他接口所实现(或者也可以说继承).它在形式上可能是如下的样子: i ...
- css3鼠标悬停图片抖动效果
提供一个参考的链接 http://demo.lanrenzhijia.com/2015/pic0113/
- Web如何应对流量劫持?
虽然互联网经过多年的发展,可是网站使用的底层协议仍是 HTTP,HTTP 作为一种明文传播协议,所有的传输数据都是明文,我们都知道在通信中使用明文(不加密) 内容可能会被窃听,同时网站存在被劫持的风险 ...
- MySQL- 5.7 sys schema笔记
如果转载,请注明博文来源: www.cnblogs.com/xinysu/ ,版权归 博客园 苏家小萝卜 所有.望各位支持! performance_schema提供监 ...
- 关于virtualenvwrapper的python, pip 的版本的问题
关于virtualenvwrapper的python, pip 的版本的问题: 在创建虚拟环境时, 我们可以用 mkvirtualenv THE_NAME_OF_VENV --python=pytho ...
- vector中删除第k个元素的巧妙方法
假设我们定义了一个vector如下: vector<int> v;v.push_back(1);...v.push_back(255); 如果要删除第k个元素的话,应该这样写: (1)如果 ...
- mysql-索引与优化
写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录.如果没有索引,查询将 ...
- dotnet使用Selenium执行自动化任务
如果要做百度文库,百度贴吧,百度知道签到,你,会怎么做?前不久我还会觉得这好像太麻烦了,now,soeasy. 自动化测试工具:Selenium Selenium是一个用于Web应用程序测试的工具.S ...
- JDK安装图解
JDK安装部分.. ---------- 此处是一个JDK下载链接:http://www.cr173.com/soft/14290.html 首先是解压下载的JDK安装包.然后右键以管理员身份运行. ...