题目链接:

https://www.luogu.org/problemnew/show/P3275

分析:

本题就是一个裸的差分约束。


核心:

x=1x=1x=1时,a=b,a−>b,b−>aa=b,a->b,b->aa=b,a−>b,b−>a,连边权值为000

x=2x=2x=2时,a&lt;ba&lt;ba<b,此时我们用整数这个性质,于是可知a≤b−1a\leq b-1a≤b−1,a−&gt;ba-&gt;ba−>b,权值为111

x=3x=3x=3时,b≤ab\leq ab≤a,bbb向aaa连权值为000

x=4x=4x=4时,b&lt;ab&lt;ab<a,此时我们用整数这个性质,于是可知b≤a−1b\leq a-1b≤a−1,b−&gt;ab-&gt;ab−>a,权值为111

x=5x=5x=5时,a≤ba\leq ba≤b,aaa向bbb连权值为000


然后就是因为每个人都有糖,所以000向iii连边,权值为1(1≤i&lt;=n)1(1\leq i&lt;=n)1(1≤i<=n)

这里很多的存储方式为了避免链的超时,需要倒序,但是这里的vector邻接表存储倒序反而超时!


提醒:

x=2x=2x=2或x=4x=4x=4时,可能出现A=BA=BA=B的情况,此时要特判输−1-1−1

数据较大,要开longlonglong longlonglong

代码:

#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
struct edge
{
int to,val;
edge(int _to,int _val)
{
to=_to;
val=_val;
}
};
long long dis[300005];
int vis[300005],tot[300005];
vector<edge>e[300005];
void add(int x,int y,int w)
{
e[x].push_back(edge(y,w));
}
int main()
{
queue<int>q;
int n,k,X,A,B;
scanf("%d%d",&n,&k);
for(int i=1;i<=k;i++)
{
scanf("%d%d%d",&X,&A,&B);
if(X==1)
{
add(A,B,0);
add(B,A,0);
}
else
if(X==2)
{
if(A==B)
{
printf("-1\n");
return 0;
}
add(A,B,1);
}
else
if(X==3)
{
add(B,A,0);
}
else
if(X==4)
{
if(A==B)
{
printf("-1\n");
return 0;
}
add(B,A,1);
}
else
add(A,B,0);
}
for(int i=1;i<=n;i++)
{
add(0,i,1);
}
vis[0]=1;
q.push(0);
while(!q.empty())
{
int x=q.front();q.pop();
vis[x]=0;
for(int i=0;i<e[x].size();i++)
{
int y=e[x][i].to;
if(dis[y]<dis[x]+e[x][i].val)
{
dis[y]=dis[x]+e[x][i].val;
if(vis[y]==0)
{
vis[y]=1;
q.push(y);
tot[y]++;
if(tot[y]>n)
{
printf("-1\n");
return 0;
} }
}
}
}
long long ans=0;
for(int i=1;i<=n;i++)
{
ans+=dis[i];
}
printf("%lld\n",ans);
return 0;
}

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

    一道条件非常多的差分约束 把\( a < b \)转化为\( a-b \le -1\)就可做了 \( a>b \)的情况同理 若有负环则无解输出-1 注意本题中要求每个人都有糖果 所以假设 ...

  4. 洛谷P3275 [SCOI2011]糖果 [差分约束系统]

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

  5. 【POJ 3159】Candies&&洛谷P3275 [SCOI2011]糖果

    来补一下自己很久以前那个很蒟蒻很蒟蒻的自己没有学懂的知识 差分约束,说白了就是利用我们在求最短路的一个\(relax\)操作时的判断的原理 \[dis[v]>dis[u]+disj(u,v)\] ...

  6. 洛谷 P3275 [SCOI2011]糖果

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

  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. PowerDesigner 在通过jdbc连接数据库时 Could not Initialize JavaVM!

    最近用到PowerDesigner的逆向工程,从数据库中逆向生成模型,本想使用odbc连接的,但是需要安装驱动,mysql的还好弄,oracle对我来讲实在是有些麻烦,看到能用jdbc连接,就想试试, ...

  2. C#try catch块

    try..catch块的出现是为了异常处理. 格式为:try{...可能发生异常的代码...} catch{...对异常的处理...} finaly{...无论如何都会执行的代码..} 上面的只是一般 ...

  3. 利用docker在window7下安装TensorFlow

    安装过程下碰了不少坑,记录一下安装过程,方便以后有需要时复用. 1.安装docker 下载最新版本的docker并且默认安装即可,安装后打开Docker Quickstart Terminal,初次进 ...

  4. 一个类的实例化对象所占空间的大小(对象大小= vptr(可能不止一个) + 所有非静态数据成员大小 + Aligin字节大小(依赖于不同的编译器))

    注意不要说类的大小,是类的对象的大小. 首先,类的大小是什么?确切的说,类只是一个类型定义,它是没有大小可言的. 用sizeof运算符对一个类型名操作,得到的是具有该类型实体的大小. 如果 Class ...

  5. 数组Array

    数组Array是最基本的数据结构,在内存中为一段定长连续内存,很多编程语言都有实现. 一.一维数组 下面代码实现了一维数组和它的遍历. clear并非清空数组,而是采用具体值对数组进行初始化. imp ...

  6. Spring Boot:使用Memcached缓存

    综合概述 Memcached是一个自由开源的,高性能,分布式内存对象缓存系统.Memcached基于内存的key-value存储,用来存储小块的任意数据,这些数据可以是数据库调用.API调用或者是页面 ...

  7. 【springBoot】SpringBoot修改启动logo图案

    修改boot启动banner logo看到比较好玩,就存一下~ (1)我们在src/main/resources下新建一个banner.txt文件. (2)通过http://patorjk.com/s ...

  8. Java学习笔记——String类型转换

    一滴水里观沧海,一粒沙中看世界 ——一带一路欢迎宴致辞 上代码: package cn.stringtoobj; public class TypeConversion { public static ...

  9. canvas 画布基本操作

    const canvas = document.getElementById('canvas'); // 2.画笔 --- canvas的上下文对象 const ctx = canvas.getCon ...

  10. Singleton and Prototype Bean Scope in Spring

    Scope描述的是Spring容器如何新建Bean的实例的. 1> Singleton: 一个Spring容器只有一个Bean的实例,此为Spring的默认配置,全容器共享一个实例. 2> ...