[ABC280F] Pay or Receive
Problem Statement
There are $N$ towns numbered $1,\ldots,N$ and $M$ roads numbered $1,\ldots,M$.
Road $i$ connects towns $A_i$ and $B_i$. When you use a road, your score changes as follows:
- when you move from town $A_i$ to town $B_i$ using road $i$, your score increases by $C_i$; when you move from town $B_i$ to town $A_i$ using road $i$, your score decreases by $C_i$.
Your score may become negative.
Answer the following $Q$ questions.
- If you start traveling from town $X_i$ with initial score $0$, find the maximum possible score when you are at town $Y_i$.
Here, if you cannot get from town $X_i$ to town $Y_i$, printnaninstead; if you can have as large a score as you want when you are at town $Y_i$, printinfinstead.
Constraints
- $2\leq N \leq 10^5$
- $0\leq M \leq 10^5$
- $1\leq Q \leq 10^5$
- $1\leq A_i,B_i,X_i,Y_i \leq N$
- $0\leq C_i \leq 10^9$
- All values in the input are integers.
Input
The input is given from Standard Input in the following format:
$N$ $M$ $Q$
$A_1$ $B_1$ $C_1$
$\vdots$
$A_M$ $B_M$ $C_M$
$X_1$ $Y_1$
$\vdots$
$X_Q$ $Y_Q$
Output
Print $Q$ lines as specified in the Problem Statement.
The $i$-th line should contain the answer to the $i$-th question.
Sample Input 1
5 5 3
1 2 1
1 2 2
3 4 1
4 5 1
3 5 2
5 3
1 2
3 1
Sample Output 1
-2
inf
nan
For the first question, if you use road $5$ to move from town $5$ to town $3$, you can have a score $-2$ when you are at town $3$.
Since you cannot make the score larger, the answer is $-2$.
For the second question, you can have as large a score as you want when you are at town $2$ if you travel as follows:
repeatedly "use road $2$ to move from town $1$ to town $2$ and then use road $1$ to move from town $2$ to town $1$" as many times as you want,
and finally use road $2$ to move from town $1$ to town $2$.
For the third question, you cannot get from town $3$ to town $1$.
Sample Input 2
2 1 1
1 1 1
1 1
Sample Output 2
inf
The endpoints of a road may be the same, and so may the endpoints given in a question.
Sample Input 3
9 7 5
3 1 4
1 5 9
2 6 5
3 5 8
9 7 9
3 2 3
8 4 6
2 6
4 3
3 8
3 2
7 9
Sample Output 3
inf
nan
nan
inf
-9
nan 明显就是不同连通块的情况,而当且仅当一个连通块中存在的环都是0环,他这个连通块的点的答案才不是 inf。
但是怎么判断一个连通块是否存在非0环呢?其实可以从某一个点开始搜索,如果到达点 \(x\) 存在两条长度不相等的路径,那么就一定存在非0环。否则就无环或者只有0环。
那么现在已经确定了起始点到某个点的距离了,设起始点为 \(a\) 到点 \(x\) 距离为 \(dis_x\),点 \(x\) 到 点 \(y\) 的距离易得为 \(dis_y-dis_x\)。这是因为没有0环,所有 \(x\) 到 \(y\) 的路径都是同样距离,,当中存在一条路径为 \(x\rightarrow a\rightarrow y\)。
#include<bits/stdc++.h>
typedef long long LL;
const int N=1e5+5;
struct edge{
int v,nxt,w;
}e[N<<1];
int n,m,q,u,v,w,fa[N],hd[N],e_num,vs[N];
LL dp[N];
void add_edge(int u,int v,int w)
{
e[++e_num]=(edge){v,hd[u],w};
hd[u]=e_num;
}
int find(int x)
{
if(fa[x]==x)
return x;
return fa[x]=find(fa[x]);
}
void dfs(int x,LL w)
{
if(dp[x]==dp[0])
dp[x]=w;
else
{
if(dp[x]!=w)
vs[find(x)]=1;
return;
}
for(int i=hd[x];i;i=e[i].nxt)
dfs(e[i].v,w+e[i].w);
}
int main()
{
memset(dp,-0x7f,sizeof(dp));
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;i++)
fa[i]=i;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&w);
add_edge(u,v,w);
add_edge(v,u,-w);
fa[find(u)]=find(v);
}
for(int i=1;i<=n;i++)
if(fa[i]==i)
dfs(i,0);
while(q--)
{
scanf("%d%d",&u,&v);
if(find(u)!=find(v))
printf("nan\n");
else if(vs[find(u)])
printf("inf\n");
else
printf("%lld\n",dp[v]-dp[u]);
}
}
[ABC280F] Pay or Receive的更多相关文章
- (混合背包 多重背包+完全背包)The Fewest Coins (poj 3260)
http://poj.org/problem?id=3260 Description Farmer John has gone to town to buy some farm supplies. ...
- POJ3260The Fewest Coins[背包]
The Fewest Coins Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6299 Accepted: 1922 ...
- The trouble of Xiaoqian
The trouble of Xiaoqian Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- POJ3260——The Fewest Coins(多重背包+完全背包)
The Fewest Coins DescriptionFarmer John has gone to town to buy some farm supplies. Being a very eff ...
- POJ3260:The Fewest Coins(混合背包)
Description Farmer John has gone to town to buy some farm supplies. Being a very efficient man, he a ...
- hdu 3591 多重加完全DP
题目: The trouble of Xiaoqian Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
- HDU 3591 (完全背包+二进制优化的多重背包)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3591 The trouble of Xiaoqian Time Limit: 2000/1000 M ...
- HDUOJ-----3591The trouble of Xiaoqian
The trouble of Xiaoqian Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- POJ 3260 The Fewest Coins(多重背包问题, 找零问题, 二次DP)
Q: 既是多重背包, 还是找零问题, 怎么处理? A: 题意理解有误, 店主支付的硬币没有限制, 不占额度, 所以此题不比 1252 难多少 Description Farmer John has g ...
- SOJ 2749_The Fewest Coins
[题意]:已知整个交易系统有N (1 ≤ N ≤ 100)种不同的货币,分别价值V1,V2,V3.......VN(1 ≤ Vi ≤ 120),FJ分别有C1,C2,C3.....CN(0 ≤ Ci ...
随机推荐
- Codespaces个性化后台服务器配置指南
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 前文概览 在前文<浏览器上写代码,4核8G微软服 ...
- Airtest遇到模拟器无法输入中文的情况该如何处理?
此文章来源于项目官方公众号:"AirtestProject" 版权声明:允许转载,但转载必须保留原链接:请勿用作商业或者非法用途 1. 前言 最近有收到同学们的一些提问,使用Air ...
- .NET Core WebAPI 基础 文件上传
昨天分享了一个在WebApi中如何接收参数的文章 .NET API 中的 FromRoute.FromQuery.FromBody 用法 - 一事冇诚 - 博客园 (cnblogs.com),然后有新 ...
- 探索API接口:从概念到实践
在当今数字化时代,API(Application Programming Interface)接口成为了各种应用程序之间实现数据交互和功能集成的关键.无论是开发一个网站.构建一个移动应用还是进行数据分 ...
- sublime运行php文件
sublime 运行 php 文件 使用 sublime 打开一个php文件 然后 Tools -> Build System -> New Build System 将以上打开的文件内容 ...
- KRPano插件解密大师更新支持最新版KRPano的XML/JS解密
KRPano插件解密大师是一款专业的全景解密工具,它可以帮助你轻松解密KRPano的XML/JS插件,还能分析下载静态和动态网站的资源.你无需任何编程知识,只需一键点击,就能快速完成解密,学习全景开发 ...
- 自定义注解实现数据序列化时进行数据脱敏(基于springboot默认jackjson)、消息转换器HttpMessageConverter
消息转换器 HttpMessageConverter 消息转化器的作用 将请求报文转化为Java对象 将Java对象转化为响应报文 消息转换器接口 public interface HttpMessa ...
- 使用mtrace追踪JVM堆外内存泄露
原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明. 简介 在上篇文章中,介绍了使用tcmalloc或jemalloc定位native内存泄露的方法,但使用这个方法相 ...
- 常见的企业Wiki
企业Wiki(Enterprise Wiki)指适用于企业或组织内部使用的Wiki.与非企业Wiki(如著名的MediaWiki)最根本的不同点在于,企业Wiki是为企业量身定做的Wiki.通过鼓励. ...
- linux知识点 ROM,RAM,SRAM,DRAM,Flash
参考视频:https://www.bilibili.com/video/BV13L4y1b7So?spm_id_from=333.337.search-card.all.click SRAM,DRAM ...