题目链接

题解

差分约束 学过的应该都会做

不会的自行百度,这里不多讲

opt=1 连一条长度为0的双向边

opt=2 (u->v) \(len=-1\)

opt=3 (v->u) \(len=0\)

opt=4 (v->u) \(len=-1\)

opt=5 (u->v) \(len=0\)

0到其他点都连一条长度为-1的边(从n到1连玄学的力量, 正着加边会T)

然后spfa最短路即可

Code

  1. #include<bits/stdc++.h>
  2. #define LL long long
  3. #define RG register
  4. using namespace std;
  5. inline int gi() {
  6. int f = 1, s = 0;
  7. char c = getchar();
  8. while (c != '-' && (c < '0' || c > '9')) c = getchar();
  9. if (c == '-') f = -1, c = getchar();
  10. while (c >= '0' && c <= '9') s = s*10+c-'0', c = getchar();
  11. return f == 1 ? s : -s;
  12. }
  13. const int N = 100010;
  14. struct node {
  15. int to, next, w;
  16. }g[(N<<1)+N];
  17. int last[N], gl;
  18. inline void add(int x, int y, int z) {
  19. g[++gl] = (node) {y, last[x], z};
  20. last[x] = gl;
  21. return ;
  22. }
  23. LL dis[N];
  24. bool vis[N];
  25. int cnt[N];
  26. queue<int> q;
  27. int main() {
  28. int n = gi(), k = gi();
  29. for (int i = 1; i <= k; i++) {
  30. int k = gi(), u = gi(), v = gi();
  31. if (k == 1)
  32. add(u, v, 0), add(v, u, 0);
  33. else if (k == 2) {
  34. if (u == v) {
  35. puts("-1");
  36. return 0;
  37. }
  38. add(u, v, -1);
  39. }
  40. else if (k == 3) add(v, u, 0);
  41. else if (k == 4) {
  42. if (u == v) {
  43. puts("-1");
  44. return 0;
  45. }
  46. add(v, u, -1);
  47. }
  48. else add(u, v, 0);
  49. }
  50. for (int i = n; i >= 1; i--) add(0, i, -1);
  51. q.push(0);
  52. memset(dis, 127/3, sizeof(dis));
  53. dis[0] = 0;
  54. while (!q.empty()) {
  55. int u = q.front();
  56. q.pop();
  57. if (++cnt[u] == n) {
  58. puts("-1");
  59. return 0;
  60. }
  61. for (int i = last[u]; i; i = g[i].next) {
  62. int v = g[i].to;
  63. if (dis[v] > dis[u]+g[i].w) {
  64. dis[v] = dis[u]+g[i].w;
  65. if (!vis[v]) q.push(v), vis[v] = 1;
  66. }
  67. }
  68. vis[u] = 0;
  69. }
  70. LL ans = 0;
  71. for (int i = 1; i <= n; i++)
  72. ans += dis[i];
  73. printf("%lld\n", -ans);
  74. return 0;
  75. }

洛谷 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]糖果

    差分约束大坑题 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring ...

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

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

随机推荐

  1. Java,Calendar -- 获取当前日期、当月月初日期、月末日期

    public class CalendarTest { public static void main(String[] args) { // 获取当前年份.月份.日期 Calendar cale = ...

  2. mybatis学习笔记 spring与mybatis整合

    转载自http://blog.csdn.net/naruto_Mr/article/details/48239357 1.创建web工程,导入spring依赖包与mybatis依赖包,还需要mybat ...

  3. PopupWindow简单使用(一)

    1.构造函数 //方法一:     public PopupWindow (Context context)     //方法二:     public PopupWindow(View conten ...

  4. 适配器(Adapter)模式

    一. 适配器(Adapter)模式 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作 二. 类的Adapter模式的结构: 目标(Ta ...

  5. 指针和动态分配内存 (不定长度数组)------新标准c++程序设计

    背景: 数组的长度是定义好的,在整个程序中固定不变.c++不允许定义元素个数不确定的数组.例如: int n; int a[n]; //这种定义是不允许的 但是在实际编程中,往往会出现要处理的数据数量 ...

  6. C# 接口(3)

    这么半天说了如何使用,实现接口.相信也都发现了接口和抽象类很多相似的地方. 但是! 这两个根本就是不一样的. 抽象类 :                                         ...

  7. plantix插件工具,eclipse工具

    代码修改后部署流程: 修改代码-->自动构建工作空间(将修改的代码或配置文件复制到classes文件夹)-->发布到tomcat环境中-->重启服务器运行 常见报错:java.lan ...

  8. jsonp的原理及其使用

    原理: 1.创建script标签 2.src远程地址 3.返回的数据必须为js格式 1.因为浏览器处于安全原因不允许跨域请求,但是允许跨域倒入js文件,所以需要创建script标签 2.src远程地址 ...

  9. 20165219 2017-2018-2《Java程序设计》课程总结

    20165219 2017-2018-2<Java程序设计>课程总结 一.每周作业链接汇总 20165219 我期望的师生关系 20165219学习基础与C语言基础调查 20165219 ...

  10. ### 20165219 2017-2018-2《Java程序设计》结对编程一 第二周总结

    20165219 2017-2018-2<Java程序设计>结对编程一 第二周总结 结对对象 20165219王彦博 20165232何彦达 需求分析 实现一个程序,要求: 1 支持整数运 ...