差分约束系统:

  给出有n个变量和m个约束条件(形如ai-aj<=k的不等式)的系统,求出满足这些约束条件的一组变量

  那么……思路是把数的模型转换成图的模型,求解一个单源最短路径问题:

  当有ai-aj<=k这个条件时,即在图中创建一条从aj指向ai的有向边,设置边权为k

  然而还要创建一个起点,可以把它理解为一个基点,它连向每一个点,边权均为0

  最后执行Bellman-ford或者SPFA等算法,求得{di}为答案

奉上裸题一道:

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

题解:

  取等时创建边权为0的边,不取等时创建边权为1的边

注意:据hzw大神题解,有一个数据是十万个点形成长链,给基点加边的时候需做从n到1的循环,否则会炸

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 #define MAXN 100010
 6 int heads[MAXN],cnt,q[MAXN*5],d[MAXN],t[MAXN],n,k;//t记录结点进队次数
 7 long long ans=0;
 8 bool vis[MAXN];
 9 struct node
10 {
11     int v,val,next;
12 }edge[3*MAXN];
13 void add(int x,int y,int z)
14 {
15     edge[++cnt].v=y;
16     edge[cnt].next=heads[x];
17     heads[x]=cnt;
18     edge[cnt].val=z;
19 }
20 bool SPFA()
21 {
22     int head=1,tail=2;
23     vis[0]=true;
24     q[head]=0;
25     t[0]=1;
26     while(head<tail)
27     {
28         for(int i=heads[q[head]];i!=0;i=edge[i].next)
29         {
30             if(d[edge[i].v]<d[q[head]]+edge[i].val)
31             {
32                 d[edge[i].v]=d[q[head]]+edge[i].val;
33                 if(!vis[edge[i].v])
34                 {
35                     if(++t[edge[i].v]>=n)return false;//结点进队次数过n,判定有环
36                     q[tail++]=edge[i].v;
37                     vis[edge[i].v]=true;
38                 }
39             }
40         }
41         vis[q[head]]=false;
42         head++;
43     }
44     return true;
45 }
46 int main()
47 {
48     int x,y,z;
49     scanf("%d%d",&n,&k);
50     for(int i=1;i<=k;i++)
51     {
52         scanf("%d%d%d",&z,&x,&y);
53         if(z==1)
54         {
55             add(x,y,0);
56             add(y,x,0);
57         }
58         else if(z==2)
59         {
60             if(x==y)
61             {
62                 printf("-1\n");//不存在自己给自己建边且边权为1
63                 return 0;
64             }
65             else add(x,y,1);
66         }
67         else if(z==3)add(y,x,0);
68         else if(z==4)
69         {
70             if(x==y)
71             {
72                 printf("-1\n");
73                 return 0;
74             }
75             else add(y,x,1);
76         }
77         else if(z==5)add(x,y,0);
78     }
79     for(int i=n;i>=1;i--)add(0,i,1);
80     if(!SPFA())
81     {
82         printf("-1\n");
83         return 0;
84     }
85     for(int i=1;i<=n;i++)ans+=d[i];
86     printf("%lld\n",ans);
87     return 0;
88 }

*参考:http://baike.baidu.com/link?url=RAR0bFN3lF9u12-B-4qTiTOO7u6YuGQ_qXXNgEmosvKKH06ouY5ZbPsKwoT6o5ho5lPf7tgBA2kYWJjhge_k3q

转载于:https://www.cnblogs.com/xqmmcqs/p/5965573.html

bzoj 2330 糖果相关推荐

  1. bzoj 2330: [SCOI2011]糖果

    2330: [SCOI2011]糖果 Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要 ...

  2. SPFA差分约束(bzoj 2330: [SCOI2011]糖果)

    2330: [SCOI2011]糖果 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 6355  Solved: 2096 [Submit][Stat ...

  3. 【BZOJ 2330】 [SCOI2011]糖果【差分约束】

    题目跳转: http://www.lydsy.com/JudgeOnline/problem.php?id=2330 Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友 ...

  4. bzoj 2330 / AcWing 368 银河 差分约束系统+tarjan缩点+拓扑排序

    怎么最近bzoj一直上不了,莫非是挂了? AcWing的地址:https://www.acwing.com/problem/content/370/ 题意: 银河中的恒星浩如烟海,但是我们只关注那些最 ...

  5. BZOJ 4338 糖果(扩展Lucas定理+CRT)

    题目链接:BZOJ 4338 题目大意:用数字1~k填一个n*m的表格,每种数字可用任意次,要求每行数字1~m列单调不减,任意两行不完全相同,求方案数对P取模的值. 题解:扩展Lucas+CRT模板题 ...

  6. BZOJ 1062 糖果雨

    http://www.lydsy.com/JudgeOnline/problem.php?id=1062 思路:找到平行四边形以后,变换坐标:y->y-kx,k为斜率,这样变成了矩形,然后只要二 ...

  7. 一句话题解(20170801~20170125)

    8.1 bzoj 4720 noip2016 换教室 floyd预处理+期望(薛定谔的猫) bzoj 4318 OSU! 三次函数期望值 从一次.二次推得 8.2 bzoj 1076 状压+期望DP ...

  8. $2019$ 暑期刷题记录 $2$(基本算法专题)

    $ 2019 $ 暑期刷题记录 $ 2 $ (基本算法专题) $ by~~wch $ $ BZOJ~1958~Strange~Towers~of~Hanoi $ (动态规划,递推) 题目大意: 求有 ...

  9. python下载文件传到服务器_windows上python上传下载文件到linux服务器指定路径【转】...

    从windows上传文件到linux,目录下的文件夹自动创建 #!/usr/bin/env python # coding: utf-8 import paramiko import datetime ...

最新文章

  1. K12(在线学习的平台)
  2. 久坐 缺乏运动 消化能力 会减弱
  3. 关于“System.Data.ProviderIncompatibleException”类型的异常
  4. qlabel文本改变信号_周明:NLP进步将如何改变搜索体验
  5. BigDecimal类整除报错的解决方案
  6. 面向对象编程 --- 反射
  7. Struts2之自定义转换器
  8. 六、面向对象编程——类和对象
  9. Python:实现password generator复杂密码生成器算法(附完整源码)
  10. vr全景图制作软件都有哪些?
  11. linux here,here交友app-here官网版下载v1.0-Linux公社
  12. 为什么可以做Shopyy独立站
  13. mysql 约束1 100分_SQL SERVER CHECK语句,使用check约束限定成绩只能为0~100分
  14. ISCC 2019 逆向rev02
  15. 如何判断一个 js 变量是数组类型
  16. [编译原理]-----第三章 词法分析
  17. Windows下Python的安装
  18. 2021年上海市安全员C证考试报名及上海市安全员C证试题及解析
  19. Android 如何关闭Navigation Bar
  20. JavaScript(网页特效)

热门文章

  1. 简述中断处理的6个步骤_微机原理67章答案
  2. 51单片机指针c语言,单片机C语言教程:C51指针的使用
  3. Linux搭建虚拟专用,Ubuntu的发行版如何搭建虚拟专用网
  4. ubuntu eclipse mysql_ubuntu下eclipse连接mysql
  5. nginx php 扩展,源码安装Nginx+PHP-FPM及扩展
  6. 在powerpoint中默认的视图是_专升本计算机《Word、Excel、Powerpoint》知识点
  7. C语言学习笔记---文件操作 fopen()函数 和 fclose()函数
  8. centos7.5 安装配置supervisor管理python进程(也就是服务)
  9. linux下无root权限安装python2.7和pip以及安装cuda9.0,cudnn7.4,pytorch-gpu
  10. Redis的AOF持久化的实现