Luogu P1073 最优贸易【最短路/建反图】 By cellur925
这么经典的题目,还是看了lyd的题解....唉难过。
一句话题意:在一张点有全都的图上找一条从1到n的路径,存在两个点p,q(p<q),使val[q]-val[p]最大。
给出的图是既有双向又有单向的混合图,考虑像普通的方法一样建图。除此之外,再在一个新邻接表中建原图的反图(边方向相反)。
为什么要这样做?
考虑分别自起点到终点和自终点到起点遍历,计算出f[]和d[],其中f[i]表示从1到i的路径中经过的最小的点权,d[i]表示从n到i的路径中经过的最大点权。(想一想,为什么?)
于是我们就可以枚举断点X,使d[x]-f[x]最大。保证了1能走到n,即路径的连贯(联通)性。
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define maxn 100090
#define maxm 500090 using namespace std; int n,m,totp,totn,ans;
int headp[maxn],headn[maxn],val[maxn],f[maxn],d[maxn],vis[maxn];
struct node{
int to,next;
};
node edge_posi[maxm*],edge_nega[maxm*]; void add_posi(int x,int y)
{
edge_posi[++totp].to=y;
edge_posi[totp].next=headp[x];
headp[x]=totp;
} void add_nega(int x,int y)
{
edge_nega[++totn].to=y;
edge_nega[totn].next=headn[x];
headn[x]=totn;
} void spfa_posi()
{
queue<int>q;
memset(d,0x3f,sizeof(d));
q.push();d[]=val[];vis[]=;
while(!q.empty())
{
int x=q.front();
q.pop();vis[x]=;
for(int i=headp[x];i;i=edge_posi[i].next)
{
int y=edge_posi[i].to;
if(min(d[x],val[y])<d[y])
{
d[y]=min(d[x],val[y]);
if(!vis[y]) q.push(y),vis[y]=;
}
}
}
} void spfa_nega()
{
queue<int>q;
memset(vis,,sizeof(vis));
memset(f,,sizeof(f));
q.push(n);d[n]=val[n];vis[n]=;
while(!q.empty())
{
int x=q.front();
q.pop();vis[x]=;
for(int i=headn[x];i;i=edge_nega[i].next)
{
int y=edge_nega[i].to;
if(max(f[x],val[y])>f[y])
{
f[y]=max(f[x],val[y]);
if(!vis[y]) q.push(y),vis[y]=;
}
}
}
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&val[i]);
for(int i=;i<=m;i++)
{
int x=,y=,opt=;
scanf("%d%d%d",&x,&y,&opt);
if(opt==)
{
add_posi(x,y);
add_nega(y,x);
}
else if(opt==)
{
add_posi(x,y);add_posi(y,x);
add_nega(y,x);add_nega(x,y);
}
}
spfa_posi();
spfa_nega();
for(int i=;i<=n;i++)
ans=max(ans,f[i]-d[i]);
printf("%d",ans);
return ;
}
建反图的思想妙啊!
Luogu P1073 最优贸易【最短路/建反图】 By cellur925的更多相关文章
- Luogu P1073 最优贸易(最短路)
P1073 最优贸易 题意 题目描述 \(C\)国有\(n\)个大城市和\(m\)条道路,每条道路连接这\(n\)个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这\(m\)条道路中有 ...
- 洛谷 P1073 最优贸易 最短路+SPFA算法
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 P1073 最优贸易 题目描述 C国有 $ n $ 个大城市和 ...
- Luogu P1073 最优贸易
题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双 ...
- LuoguP1342请柬 【最短路/建反图】By cellur925
题目传送门 开始就想直接正向跑一遍Dij把到各点的最短路加起来即可,后来发现与样例少了些,于是再读题发现需要也求出学生们回来的最短路. 但是注意到本题是有向图,如果是无向图就好说. 那么我们怎么解决? ...
- 【luogu P1073 最优贸易】 题解
题目链接:https://www.luogu.org/problemnew/show/P1073 对于状态量相互影响的题目,分层图是个不错的想法. 考虑在题目中分为: 不交易: 直接从1到n出去,为0 ...
- [NOIp2009] luogu P1073 最优贸易
md 我发现跟你们聊天贼没意思. 题目描述 我觉得描述挺好,不改了吧. Solution 容易发现这是道 dfs + DP 的乱搞题. 设 f[x]f[x]f[x] 表示到 xxx 这个点的最优答案. ...
- 洛谷 P1073 最优贸易 & [NOIP2009提高组](反向最短路)
传送门 解题思路 很长的题,实际上在一个有向图(点有点权)中求一个从起点1到终点n的路径,使得这条路径上点权最大的点与点权最小的点的差值最大(要求必须从点权较小的点能够走到点权较大的点). ——最短路 ...
- P1073 最优贸易 建立分层图 + spfa
P1073 最优贸易:https://www.luogu.org/problemnew/show/P1073 题意: 有n个城市,每个城市对A商品有不同的定价,问从1号城市走到n号城市可以最多赚多少差 ...
- 洛谷 P1073 最优贸易 解题报告
P1073 最优贸易 题目描述 \(C\)国有\(n\)个大城市和\(m\)条道路,每条道路连接这\(n\)个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这\(m\)条道路中有一部分 ...
随机推荐
- BNUOJ Eeny Meeny Moo
Eeny Meeny Moo Time Limit: 1000ms Memory Limit: 65535KB 大家都有这种经验,当太多的人同时使用互联网的时候 ...
- HUD——1083 Courses
HUD——1083 Courses Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- foobar2000 iOS使用,并连接PC的歌曲进行播放
foobar2000移动版下载地址:http://mobile.foobar2000.com/ 要实现歌曲互通有两种方法,使用iOS客户端的FTP Server用PC上传歌曲到iOS手机,和在PC上使 ...
- CSS 空中飘动的云动画
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- Codeforces Round #277 (Div. 2)---C. Palindrome Transformation (贪心)
Palindrome Transformation time limit per test 1 second memory limit per test 256 megabytes input sta ...
- Win7 Windows Update更新的文件默认在哪个位置
C:\Windows\SoftwareDistribution\download
- axis2开发webservice之编写Axis2模块(Module)
axis2中的模块化开发.能够让开发者自由的加入自己所需的模块.提高开发效率,减少开发的难度. Axis2能够通过模块(Module)进行扩展. Axis2模块至少须要有两个类,这两个类分别实现了Mo ...
- API Copy Big FIles
public class ApiCopyFile { private const int FO_COPY = 0x0002; private const int FOF_ALLOWUNDO = 0x0 ...
- 添加 XML内Rows数据
public static void addItemToXml(string method,string firstKey,string id,string checkName,string refV ...
- asp.net mvc的权限管理设计
现在集中展示用户-角色-权限管理的功能,因此,所有数据表一律简化处理. 1 后台管理效果 (1)角色管理 (2)权限管理 2 数据库设计(MSSQL) (1)用户表dbo.Users 项 类型 ...