BZOJ 2330 [SCOI2011]糖果
来源:互联网 发布:windows vue webpack 编辑:程序博客网 时间:2024/05/29 12:09
发现篇博文讲差分约束讲的挺好
http://www.cppblog.com/menjitianya/archive/2015/11/19/212292.html
照着文章自学了一遍,发现这道题就是一道裸题嘛。
设一个超级源,表示基础的0,要求所有的值均严格大于0,spfa一下,将距离数组相加就是答案,若存在负环,则不存在一个合理解。
关于差分约束的建图,还想mark一下:
1.若求一个变量
2.若不等式形式为
对于这道题的一个毒瘤数据:一条1->n的链,0向其他节点建边的顺序反向即可,从1更新到n,一次更新完毕,避免最坏退化成
#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>#include<queue>#include<algorithm>using namespace std;const int maxn=100005;struct edge{ int to,next,val;}e[maxn<<2];int n,m;int head[maxn],dist[maxn],tim[maxn];bool inq[maxn];void insert(int a,int b,int c){ static int cnt=0; e[++cnt].to=b;e[cnt].val=c;e[cnt].next=head[a];head[a]=cnt;}bool spfa(){ queue<int>q; q.push(0);inq[0]=1; while(!q.empty()) { int u=q.front(); q.pop(); inq[u]=false; for(int i=head[u];i;i=e[i].next) { int v=e[i].to; if(dist[u]+e[i].val>dist[v]) { dist[v]=dist[u]+e[i].val; tim[v]++; if(tim[v]>n)return false; if(inq[v])continue; inq[v]=true,q.push(v); } } } return true;}int main(){ scanf("%d%d",&n,&m); for(int i=n;i;i--)//倒着加边 insert(0,i,1); for(int i=1,op,d1,d2;i<=m;i++) { scanf("%d%d%d",&op,&d1,&d2); if(op%2==0&&d1==d2){puts("-1");return 0;} if(op==1)insert(d1,d2,0),insert(d2,d1,0); else if(op==2)insert(d1,d2,1); else if(op==3)insert(d2,d1,0); else if(op==4)insert(d2,d1,1); else insert(d1,d2,0); } if(!spfa()){puts("-1");return 0;} long long ans=0; for(int i=1;i<=n;i++) ans+=dist[i]; printf("%lld",ans); return 0;}
阅读全文
0 0
- BZOJ 2330: [SCOI2011]糖果
- BZOJ 2330 [SCOI2011]糖果
- BZOJ 2330: [SCOI2011]糖果
- BZOJ 2330: [SCOI2011]糖果
- BZOJ 2330: [SCOI2011]糖果
- BZOJ 2330[SCOI2011]糖果
- BZOJ 2330 [SCOI2011]糖果
- BZOJ 2330 SCOI2011 糖果 差分约束
- 【差分约束】BZOJ 2330: [SCOI2011]糖果
- 【bzoj 2330】[SCOI2011]糖果 差分约束
- 【BZOJ 2330】 [SCOI2011]糖果【差分约束】
- BZOJ 2330: [SCOI2011]糖果 查分约束
- |BZOJ 2330|差分约束|[SCOI2011]糖果
- BZOJ 2330 [SCOI2011]糖果 差分约束
- BZOJ 2330: [SCOI2011]糖果 差分约束
- BZOJ P2330[SCOI2011]糖果
- BZOJ 2330 [SCOI2011]糖果 差分约束spfa版
- bzoj 2330 [SCOI2011]糖果(差分约束系统)
- Gym 101246.C
- Java操作MongoDB
- apache查看工作模式及调优
- Python 包相关安装情况
- LeetCode-112. Path Sum
- BZOJ 2330 [SCOI2011]糖果
- 链表的操作
- 20171016学习《css权威指南》7-9章
- 命令行方式以及将java工具所在路径告诉windows系统
- javascript标签最佳置放位置
- 跟着姜少学Java基础编程之七:选择结构之switch
- 2017-10-15连续第5天总结
- 五、集合
- 51入门基础知识储备---ROM与RAM:计算机中的2种存储器