题目链接:

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. UWP中String 转为Path Data

    定义方法: Geometry PathMarkupToGeometry(string pathMarkup) { string xaml = "<Path " + " ...

  2. Android实现dialog时候弹出软键盘dialog移位问题

    Window win = getWindow(); WindowManager.LayoutParams params = win.getAttributes(); win.setSoftInputM ...

  3. 2015元旦第一弹——WP8.1应用程序栏(C#后台代码编写)

    //第一次写博文,以后还请各位道友互相关照哈.废话不多说,直接进入正题. 相信大家对于如何在XAML添加应用程序栏应该很清楚,不清楚的话,可以打开新建个Pviot应用 就有系统自带的菜单栏. 本文主要 ...

  4. CS224n笔记一:开端

    何为自然语言处理 自然语言处理的目标是让计算机处理或者"理解"自然语言,以完成有意义的任务,如QA等. 自然语言处理涉及的层次 输入有两个来源:语音和文本,所以第一级是语音识别,O ...

  5. Delphi与Windows 7下的用户账户控制(UAC)机制(有可能需要取消enable runtime themes)

    WIN7/WIN8/WIN10, Vista提供的UAC机制,它的主要目的是防止对于操作系统本身的恶意修改.对于Delphi程序的影响,UAC主要在于以下几点:1.由于UAC机制,Delphi对于系统 ...

  6. 80%的岗位是没有太多能力上的要求的(少部分聪明的人开始觉醒,这部分一定是那些主动追求、主动学习的人;30岁现象能区分真正专业和不学无术的人)good

    不要沦陷程序员的30岁问题     热门> 就是学习能力和工作热情态度的问题. 我之前也跟作者一样思考过这个问题,答案是否定的. 在知识积累的行业,年纪越大,越吃香,比如金融,医学,IT.就怕3 ...

  7. 每日一问:浅谈 onAttachedToWindow 和 onDetachedFromWindow

    基本上所有 Android 开发都会接触到 onCreate().onDestory().onStart().onStop() 等这些生命周期方法,但却不是所有人都会去关注到 onAttachXXX( ...

  8. Spring Cloud Config 使用SVN 和 git方式的相关配置

    文件的存储方式: 1.使用svn 当做配置中心 config server的配置方式: 引入svn的包 <dependency> <groupId>org.tmatesoft. ...

  9. Eclipse远程代码调试

    前提:远程服务器上运行的WEB项目class对应的源码与本地项目中必须保持一致 也就是远程tomcat部署的项目就是本机项目打包过去的,而本机项目没有发生变动. 1.配置$tomcat_home/bi ...

  10. C# 设计模式,简单工厂

    C# 实现计算机功能 (封装,继承,多态) using System; using System.Collections.Generic; using System.Linq; using Syste ...