题目戳这里

N句话题意

有N个人,k个限制,有五种限制

如果X=1, 表示第A个小朋友的糖果必须和第B个小朋友的糖果一样多;

如果X=2, 表示第A个小朋友的糖果必须少于第B个小朋友的糖果;

如果X=3, 表示第A个小朋友的糖果必须不少于第B个小朋友的糖果;

如果X=4, 表示第A个小朋友的糖果必须多于第B个小朋友的糖果;

如果X=5, 表示第A个小朋友的糖果必须不多于第B个小朋友的糖果;

求满足所有要求需要最少的糖果数(每个人至少为1)

**Solution**

一个差分约束题目,然额本蒟蒻还不是很会。首先分析限制条件,很明显2和4,3和5是一样的限制,并且要求最少的糖果数。那么不少于(多于)我们就建0边,而要求少于(多于)我们就建权值为1的边,很明显这样所需要的糖果最少。建好图后我们只需要跑一遍最长路即可。

为什么是最长路呢?看看下面这张图,(也是盗的)。

图中dis[1]如果是最短路为1,但很显然1点至少需要两个糖果。(很显然,因为肯定得满足约束最多的条件的情况才是合法的!)。

注:后面0向1→n建边时一定要倒序。

Coding

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
int head[N],n,m,cnt;
struct limit
{
int to,next;
long long w;
}e[N*5];
void add(int x,int y,long long w)
{
e[++cnt].to=y,e[cnt].next=head[x],e[cnt].w=w;
head[x]=cnt;
}
int dis[N],tot[N];
long long vis[N];
queue<int> q;
bool SPFA()
{
q.push(0);
dis[0]=0;
vis[0]=1;
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=0;
tot[u]++;
if(tot[u]==n-1) {cout<<-1; return 0;}
for(int i=head[u];i;i=e[i].next)
{
int v=e[i].to;
if(dis[u]+e[i].w>dis[v])
{
dis[v]=dis[u]+e[i].w;
if(!vis[v]) q.push(v),vis[v]=1;
}
}
}
return 1;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y,opt;
scanf("%d%d%d",&opt,&x,&y);
if(opt==1) add(x,y,0),add(y,x,0);
if(opt==2)
{
if(x==y) {cout<<-1; return 0;}
add(x,y,1);
}
if(opt==3) add(y,x,0);
if(opt==4)
{
if(x==y) {cout<<-1; return 0;}
add(y,x,1);
}
if(opt==5) add(x,y,0);
}
for(int i=n;i;i--) add(0,i,1);
if(!SPFA()) return 0;
long long ans=0;
for(int i=1;i<=n;i++)
ans+=dis[i];
cout<<ans;
return 0;
}

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

  1. BZOJ2330或洛谷3275 [SCOI2011]糖果

    BZOJ原题链接 洛谷原题链接 很明显的差分约束,但数据范围较大,朴素\(SPFA\)判正环求解会\(T\)(理论上如此,但我看到有挺多人用朴素的还跑得挺快..),所以需要优化. 我们所建立的有向图中 ...

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

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

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

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

  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]糖果 [差分约束系统]

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

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

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

  8. 洛谷P3275 [SCOI2011]糖果

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

  9. 洛谷 P3275 [SCOI2011]糖果

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

随机推荐

  1. 状态压缩DP常遇到的位运算

    位操作一共有6种形式:<<,>>,&,|,^,~; 1.左移操作符<<:左移操作符将整数的二进制向左移若干位,将最高若干位挤掉,并在低位补0 如: ; // ...

  2. ArcGIS教程:公布地理处理服务

    要公布地理处理服务.您须要两个元素:结果 窗体中的结果和到 ArcGIS Server 的管理员或公布者连接. 要公布服务,请右键单击结果并选择共享为 > 地理处理服务.例如以下图所看到的.此操 ...

  3. df、du、fdisk:Linux磁盘管理

    磁盘是Linux系统中一项非常重要的资源,如何对其进行有效的管理直接关系到整个系统的性能问题.对Linux磁盘管理稍微有一些学习和经验的朋 友们应该都知道df.du和fdisk这三个常用命令:df用于 ...

  4. 【Salvation】——人物角色动画实现

    写在前面:这个角色动画主要使用JavaScript编写脚本,在Unity3D游戏引擎的环境中实现. 一.显示角色并实现镜像效果 1.显示贴图: create→cube→修改名称为player,位置归0 ...

  5. 2017.3.14 activiti实战--第二十章--REST服务

    学习资料:<Activiti实战> 第二十章 REST服务 20.1 通信协议概述 略. 20.2 REST API概述 资源分类 资源基础URI 说明 Deployments manag ...

  6. dubbo zookeeper案例

    Alibaba有好几个分布式框架,主要有:进行远程调用(类似于RMI的这种远程调用)的(dubbo.hsf),jms消息服务(napoli.notify),KV数据库(tair)等.这个框架/工具/产 ...

  7. Java常见问题分析(内存溢出、内存泄露、线程阻塞等)

    Java垃圾回收机制(GC) 1.1 GC机制作用 1.2 堆内存3代分布(年轻代.老年代.持久代) 1.3 GC分类 1.4 GC过程 Java应用内存问题分析 2.1 Java内存划分 2.2 J ...

  8. Mockito使用指南

    转载请标明出处:http://blog.csdn.net/shensky711/article/details/52771493 本文出自: [HansChen的博客] mock和Mockito的关系 ...

  9. 360Webscan Bypass

    来到select正则: ? 1 \<.+javascript:window\[.{1}\\x|<.*=(&#\d+?;?)+?>|<.*(data|src)=data: ...

  10. /etc/shadow 密码加密方法

    [root@mysql-master ~]# cat /etc/shadowroot:$6$spzQDWctb8Lmju0o$KoUz5Qwv1tWyVYfd5cuBw.TQVIaCvCX8ixGG9 ...