题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2330

类似于题目中这种含有不等式关系,我们可以建立差分约束系统来跑最长路或最短路。

对于一个不等式$X_1-X_2>=a$我们可以看成是$X_1>=X_2+a$,把$X_1$和$X_2$看成两个点,我们可以发现这个关系跟最长路中的$dis[v]>=dis[u]+w[i]$很像,就是最长路中的点一定满足这样的关系。

所以我们就按着这个思路,先把关于点$X_1$,$X_2$和边$a$的图建好,再来跑一遍最长路,如果有解,就一定满足题目中的不等式关系。

具体连边方式就是若有$a>=b+c$,则连$b$到$a$,边权为$c$。最短路同理。

最长路无解的情况就是存在正权环,最短路存在负权环。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
typedef long long ll;
const int INF=<<;
int inline readint(){
int Num;char ch;
while((ch=getchar())<''||ch>'');Num=ch-'';
while((ch=getchar())>=''&&ch<='') Num=Num*+ch-'';
return Num;
}
int N,K;
int to[],ne[],w[],fir[],cnt=;
void Add(int a,int b,int c){
to[++cnt]=b;
w[cnt]=c;
ne[cnt]=fir[a];
fir[a]=cnt;
}
int vis[],dis[];
bool in[];
queue <int> q;
ll spfa(){
for(int i=;i<=N;i++) dis[i]=-INF;
in[N+]=true;
q.push(N+);
dis[N+]=;
vis[N+]=;
int u;
while(!q.empty()){
u=q.front();
q.pop();
in[u]=false;
for(int i=fir[u];i!=-;i=ne[i]){
int v=to[i];
if(dis[v]<dis[u]+w[i]){
dis[v]=dis[u]+w[i];
if(!in[v]){
q.push(v);
in[v]=true;
vis[v]++;
if(vis[v]>N) return -;
}
}
}
}
ll ans=;
for(int i=;i<=N;i++) ans+=dis[i];
return ans;
}
int main(){
memset(fir,-,sizeof(fir));
N=readint();
K=readint();
for(int i=;i<=K;i++){
int X=readint(),
A=readint(),
B=readint();
switch(X){
case :
Add(B,A,);
Add(A,B,);
break;
case :
if(A==B){
puts("-1");
return ;
}
Add(A,B,);
break;
case :
Add(B,A,);
break;
case :
if(A==B){
puts("-1");
return ;
}
Add(B,A,);
break;
case :
Add(A,B,);
break;
}
}
for(int i=N;i>=;i--) Add(N+,i,);
printf("%lld\n",spfa());
return ;
}

最新文章

  1. 字符串 中的split 与数组中的join
  2. 【JUC】JDK1.8源码分析之ConcurrentSkipListMap(二)
  3. chm转换为html
  4. MySQL-curses/termcap缺失
  5. 经典71道Android试题及答案
  6. Gym 100285G Cipher Message 3
  7. Android 自学之自动完成文本框 AutoCompleteTextView
  8. Apache Commons IO入门教程(转)
  9. 6.UDP协议
  10. Hadoop集群时间同步
  11. CSharpGL(45)自制控件的思路
  12. JVM回收器与调优
  13. 2018-2019-3 20165314《网络对抗技术》Exp2 后门原理与实践
  14. tree状数据叶子节点与根节点等的递归转换
  15. c3p0数据源的第一次尝试
  16. hue报错StructuredException: timed out (code THRIFTSOCKET): None的处理
  17. MQTT压力测试工具之JMeter插件教程
  18. 为什么主流的 App 看起来都差不多?这可能是件好事
  19. docker swarm英文文档学习-4-swarm模式如何运行
  20. UVaLive 4452 The Ministers&#39; Major Mess (TwoSat)

热门文章

  1. struts2的文件上传机制
  2. Latex 1: 解决latex中遇到一个常见错误:&quot;Improper alphabetic constant.&quot;
  3. 2.7 xargs和exec详解【转】
  4. bzoj1465 bzoj1045: [HAOI2008] 糖果传递&amp;&amp;bzoj3293: [Cqoi2011]分金币
  5. HDU2444 The Accomodation of Students —— 二分图最大匹配
  6. inexact rename detection was skipped due to too many files
  7. YTU 2905: The Sum of 1...N
  8. mac系统下mysql5.7.13数据库编码查看和设置
  9. python的thread和threading区别
  10. memcached value最大限制只能是1M吗