2021.07.23 P3275 糖果(差分约束)

[P3275 SCOI2011]糖果 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

重点:

1.为了满足更多更多约束条件,合适地选择最长路或最短路(我个憨憨,强行最短路,因此还加了负号)

题意:

k个约束条件,求满足所有约束条件并且每个点的值都大于0的每个点点权之和的最小值。

分析:

v(A,B)为从A到B的边权的值,且A点点权小于B。为了让点权之和最小,强行要求A>=B||A<=B为A==B。为了满足更多约束条件,跑最长路,记得加超级源点。

当x1时,v(A,B)=v(B,A)=0;当x2时,v(A,B)=1;当x3时,v(B,A)=0;当x4时,v(B,A)=1;当x==5时,v(A,B)=0。

代码如下:

  1. //为了满足更多的约束条件,一定要跑最长路!!!
  2. #include<cstdio>
  3. #include<iostream>
  4. #include<algorithm>
  5. #include<queue>
  6. #include<cstring>
  7. using namespace std;
  8. typedef long long ll;
  9. const int N=1e6+10;
  10. const ll inf=1e18;
  11. int n,m,cnt,head[N],vis[N],tot[N];
  12. ll dis[N];
  13. struct node{
  14. int to,next,val;
  15. }a[N];
  16. struct nodei{
  17. int pos;
  18. ll dis;
  19. bool operator <(const nodei &b)const{
  20. return dis<b.dis;
  21. }
  22. };
  23. inline int read(){
  24. int s=0,w=1;
  25. char ch=getchar();
  26. while(ch<'0'||ch>'9'){
  27. if(ch=='-')w=-1;
  28. ch=getchar();
  29. }
  30. while(ch<='9'&&ch>='0'){
  31. s=s*10+ch-'0';
  32. ch=getchar();
  33. }
  34. return s*w;
  35. }
  36. void add(int u,int v,int w){
  37. ++cnt;
  38. a[cnt].to=v;
  39. a[cnt].next=head[u];
  40. a[cnt].val=w;
  41. head[u]=cnt;
  42. }
  43. int spfa(int s){
  44. //memset(dis,-1,sizeof(dis));
  45. priority_queue<nodei>q;
  46. q.push({s,0});
  47. vis[s]=tot[s]=1;
  48. dis[s]=0;
  49. while(!q.empty()){
  50. nodei tmp=q.top();q.pop();
  51. int x=tmp.pos;
  52. vis[x]=0;
  53. ++tot[x];
  54. if(tot[x]==n)return 0;
  55. for(int i=head[x];i;i=a[i].next){
  56. int v=a[i].to;
  57. if(dis[v]<dis[x]+a[i].val){
  58. dis[v]=dis[x]+a[i].val;
  59. if(!vis[v]){
  60. vis[v]=1;
  61. q.push({v,dis[v]});
  62. }
  63. }
  64. }
  65. }
  66. return 1;
  67. }
  68. int main(){
  69. n=read();m=read();
  70. for(int i=1;i<=m;i++){
  71. int op,u,v;
  72. op=read();u=read();v=read();
  73. if(op==1)add(u,v,0),add(v,u,0);
  74. else if(op==2){
  75. if(u==v)return cout<<"-1",0;
  76. add(u,v,1);
  77. }else if(op==3)add(v,u,0);
  78. else if(op==4){
  79. if(u==v)return cout<<"-1",0;
  80. add(v,u,1);
  81. }else if(op==5)add(u,v,0);
  82. }
  83. for(int i=1;i<=n;i++)add(n+1,i,1);
  84. if(!spfa(n+1))return cout<<"-1",0;
  85. ll ans=0;
  86. for(int i=1;i<=n;i++)ans+=dis[i];
  87. cout<<ans;
  88. return 0;
  89. }

2021.07.23 P3275 糖果(差分约束)的更多相关文章

  1. 2021.07.23 P2474 天平(差分约束)

    2021.07.23 P2474 天平(差分约束) [P2474 SCOI2008]天平 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 已知A,B和每两个点点权,求点权i, ...

  2. P3275 [SCOI2011]糖果 && 差分约束(二)

    学习完了差分约束是否有解, 现在我们学习求解最大解和最小解 首先我们回想一下是否有解的求解过程, 不难发现最后跑出来任意两点的最短路关系即为这两元素的最短路关系. 即: 最后的最短路蕴含了所有元素之间 ...

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

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

  4. BZOJ 2330 SCOI2011糖果 差分约束

    2330: [SCOI2011]糖果 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2819  Solved: 820 题目连接 http://www ...

  5. BZOJ2330:[SCOI2011]糖果(差分约束)

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

  6. bzoj 2330 [SCOI2011]糖果 差分约束模板

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

  7. bzoj2330糖果——差分约束

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2330 差分约束,再建立一个源点0,向所有点连边权为1的边,表示每个人都会分到糖果: 答案较大 ...

  8. [SCOI2011]糖果 (差分约束)

    题目链接 Solution 差分约束乱搞就好了. 需要注意的地方: 对于大于等于的直接联等于,应为等于,因为对于我满足条件而言,等于总是最好的. 对于等于的,注意要建双向边. 然后要开 \(long~ ...

  9. BZOJ2330 糖果[差分约束方案+spfa?/tarjan]

    以往对于差分约束理解不是太深,导致这题屡次被坑,在此记录一下细节的理解. 差分约束实际上就是利用了spfa的一个特性:只要有$dis_y>dis_x+w_{x,y}$就松弛,直到所有边关系都满足 ...

随机推荐

  1. MySQL SQL Injection Cheat Sheet

    MySQL SQL Injection Cheat Sheet Some useful syntax reminders for SQL Injection into MySQL databases- ...

  2. FPGA驱动LCD显示红绿蓝彩条

    实验目的:先简单熟悉LCD灯的驱动和时序图的代码实现.设计功能是让LCD显示红绿蓝三种颜色,即三个彩带.本次实验比较容易实现,主要是对LCD驱动时序图的理解和时序参数的配置. 实验条件:1.LCD原理 ...

  3. CF1404E Bricks (最大权独立集)

    考虑把答案进行转化,通过分矩形条,我们能去掉一些夹在#之间的边 那么答案= #个数 - 能去掉的边个数 但去掉是有限制的,同一个#格子的横边和竖边不能同时去掉 把边转化成点,限制变成边. 横竖边的点 ...

  4. Java 框架、库和软件的精选列表(awesome java)

    原创翻译,原始链接 本文为awesome系列中的awesome java Awesome Java Java 框架.库和软件的精选列表 项目 Bean映射 简化 bean 映射的框架 dOOv - 为 ...

  5. 【编程教室】Python绘制冬奥吉祥物“冰墩墩”

    大家好,欢迎来到 Crossin的编程教室 ! 这两天,随着北京冬奥会的开幕,吉祥物"冰墩墩"可是火出了圈,多少人排长队都买不到.据说甚至有人把价格炒到了几千元. 就连昨天的&qu ...

  6. 《Java多线程编程核心技术》知识梳理

    <Java多线程编程核心技术> @author ergwang https://www.cnblogs.com/ergwang/ 文章末尾附pdf和png下载链接 第1章 Java多线程技 ...

  7. Struts2框架提供的结果类型?

    已配置结果类型名 类 名 描 述 dispatcher org.apache.struts2.dispatcher.ServletDispatcherResult 默认结果类型,用来呈现JSP页面 c ...

  8. ACL 权限控制机制 ?

    UGO(User/Group/Others) 目前在 Linux/Unix 文件系统中使用,也是使用最广泛的权限控制方式.是一种粗 粒度的文件系统权限控制模式. ACL(Access Control ...

  9. Linux编译安装软件常见问题及排查

    1.配置cmake参数时提示: The C compiler identification is unknown. The CXX compiler identification is unknown ...

  10. 学习Keepalived(三)

    1.1Keepalived高可用软件 Keepalived起初是专为LVS设计的,专门用来监控LVS集群系统中各个服务节点的状态,后来又加入了VRRP的功能,因此除了配合LVS服务外,也可以作为其他服 ...