差分约束大坑题

 #include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#define re register int
#define ll long long
#define MAXN 100000+10
using namespace std;
int n,m;
int b[MAXN];
ll d[MAXN];
int fst[MAXN],nxt[*MAXN],to[*MAXN],vl[*MAXN],cnt;
char ss[<<],*A=ss,*B=ss;
inline char gc(){if(A==B){B=(A=ss)+fread(ss,,<<,stdin);if(A==B)return EOF;}return*A++;}
template<class T>inline void read(T&x){
char c;re y=;while(c=gc(),c<||<c)if(c=='-')y=-;x=c^;
while(c=gc(),<c&&c<)x=(x<<)+(x<<)+(c^);x*=y;
}
inline void ins(int x,int y,int w){
nxt[++cnt]=fst[x],fst[x]=cnt,to[cnt]=y,vl[cnt]=w;
}
inline int spfa(int x){
b[x]=;
for(re e=fst[x];e;e=nxt[e]){
re y=to[e],w=vl[e];
if(d[y]>d[x]+w){
d[y]=d[x]+w;
if(b[y]||!spfa(y))return ;
}
}
b[x]=;
return ;
}
int main()
{
// freopen("data.in","r",stdin);
read(n),read(m);
for(re i=n;i>=;i--){
ins(,i,-);
}
int k,x,y;
for(re i=;i<=m;i++){
read(k),read(x),read(y);
if(k%==&&x==y){
printf("-1\n");
return ;
}
switch(k){
case :ins(x,y,),ins(y,x,);break;
/*<*/ case :ins(x,y,-);break;
/*>=*/ case :ins(y,x,);break;
/*>*/ case :ins(y,x,-);break;
/*<=*/ case :ins(x,y,);
}
}
// for(int i=1;i<=n;i++){
// printf("%d:",i);
// for(int j=fst[i];j;j=nxt[j]){
// printf("%d ",to[j]);
// }
// printf("\n");
// }
ll ans=;
if(spfa()){
for(re i=;i<=n;i++)
ans-=d[i];
printf("%lld\n",ans);
}
else{
printf("-1\n");
}
return ;
}

另外用tarjan缩一下点就不会卡常了,然而比较难写

洛谷P3275 [SCOI2011]糖果的更多相关文章

  1. 洛谷——P3275 [SCOI2011]糖果

    P3275 [SCOI2011]糖果 差分约束模板题,基本思路就是$d[v]+w[v,u]<=d[u]$,$Spfa$更新方法, 有点套路的是要建立原点,即图中不存在的点来向每个点加边,但同样这 ...

  2. 洛谷P3275 [SCOI2011]糖果(差分约束,最长路,Tarjan,拓扑排序)

    洛谷题目传送门 差分约束模板题,等于双向连0边,小于等于单向连0边,小于单向连1边,我太蒻了,总喜欢正边权跑最长路...... 看遍了讨论版,我是真的不敢再入复杂度有点超级伪的SPFA的坑了 为了保证 ...

  3. 洛谷P3275 [SCOI2011]糖果 [差分约束系统]

    题目传送门 糖果 题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比 ...

  4. 【POJ 3159】Candies&&洛谷P3275 [SCOI2011]糖果

    来补一下自己很久以前那个很蒟蒻很蒟蒻的自己没有学懂的知识 差分约束,说白了就是利用我们在求最短路的一个\(relax\)操作时的判断的原理 \[dis[v]>dis[u]+disj(u,v)\] ...

  5. 题解——洛谷P3275 [SCOI2011]糖果

    一道条件非常多的差分约束 把\( a < b \)转化为\( a-b \le -1\)就可做了 \( a>b \)的情况同理 若有负环则无解输出-1 注意本题中要求每个人都有糖果 所以假设 ...

  6. 洛谷P3275 [SCOI2011]糖果 题解

    题目链接: https://www.luogu.org/problemnew/show/P3275 分析: 本题就是一个裸的差分约束. 核心: x=1x=1x=1时,a=b,a−>b,b−> ...

  7. 洛谷P3275 [SCOI2011]糖果(差分约束)

    题目描述 幼儿园里有 $N$ 个小朋友,$lxhgww $老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的 ...

  8. 洛谷 P3275 [SCOI2011]糖果

    题目链接 题解 差分约束 学过的应该都会做 不会的自行百度,这里不多讲 opt=1 连一条长度为0的双向边 opt=2 (u->v) \(len=-1\) opt=3 (v->u) \(l ...

  9. 洛谷P3275 [SCOI2011]糖果_差分约束_判负环

    Code: #include<cstdio> #include<queue> #include<algorithm> using namespace std; co ...

随机推荐

  1. 小黄衫 Get

    小黄衫 Get .   十分荣幸在前四次作业中以微弱的3分之差拿到了第一,获得了本次的小黄衫. 先发点牢骚.. 讲道理,原本以为的研究生生涯应该就是埋在论文堆里度过的时候顺便上上课.当初选课的时候,学 ...

  2. Dijkstra算法课后补分博客

    题目名称:Dijkstra算法 题目要求:课上给出相关附图,求解附图顶点A的单源最短路径. 附图: 做题过程 1.了解Dijkstra算法的相关知识,包括定义以及使用方法. 定义:Dijkstra算法 ...

  3. MySQL 操作详解

    MySQL 操作详解 一.实验简介 本节实验中学习并实践 MySQL 上创建数据库.创建表.查找信息等详细的语法及参数使用方法. 二.创建并使用数据库 1. 创建并选择数据库 使用SHOW语句找出服务 ...

  4. PHP、Java、Python、C、C++ 这几种编程语言都各有什么特点或优点

    PHP.Java.Python.C.C++ 这几种编程语言都各有什么特点或优点 汇编: C: Java: C#: PHP: Python: Go: Haskell: Lisp: C++: &l ...

  5. Python之旅.第二章数据类型 3.19/3.20/3.21/3.22/3.23

    一.数字类型 1.int类型: 基本使用: 用途:用于年龄,手机号,身份证号: 定义: age=18: 常用操作+内置方法: 正常的运算赋值: 进制转换: print(bin(3)); 把十进制3转换 ...

  6. Java XML Dom解析工具

    Java XML Dom解析工具 缩进等 transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); ...

  7. Struts2 配置文件小结

    每次写的博文都被管理员都被移出首页,好气!还希望有哪位大神可以指点迷津-- struts2 配置文件的 result 节点 result 节点是 action 节点的子节点,他代表着 action 方 ...

  8. 新概念英语(1-141)Sally's first train ride

    Lesson 141 Sally's first train ride 萨莉第一交乘火车旅行 Listen to the tape then answer this question. Why was ...

  9. 新概念英语(1-15)Your passports please

    Is there a problem wtih the Customers officer? A:Are you Swedish? B:No. We are not. We are Danish. A ...

  10. GIT入门笔记(14)- 链接到远程仓库

    1.远程仓库地址https://github.com/ 2.注册远程仓库账号 3.生成ssh-key,并配置到github 由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以, ...