题目链接:

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. MongoDB对文档的操作

    插入文档 db.COLLECTION_NAME.insert({doc1},{doc2},...) e.g.:db.collection.insert({name:'123',age:12},{nam ...

  2. IdHTTP设置SSL证书,乱码问题也解决了

    要跟银行做接口,需要使用delphi来post数据,但对方提供的是https开头的网址,需要使用证书,对方已提供证书了,但是还是调用不成功,使用的是idhttp和TIdSSLIOHandlerSock ...

  3. VS2013设置release版本可调试

    http://blog.csdn.net/caoshangpa/article/details/76575640

  4. 获取函数的地址(三种方法,分别是@,Addr,MethodAddress)

    问题来源: http://www.cnblogs.com/del/archive/2008/07/30/1039045.html#1272783 在编译器看来, 重载函数根本就是完全不同的几个函数, ...

  5. 用 jQuery.getJSON() 跨域请求 JSON 数据

    $.getJSON()可以理解为特殊形式的$.ajax(),手册里的说明好复杂,这里只记录一下用到的跨域请求. 先说在同一域名下,js发送数据到php,php返回JSON数据: $.getJSON(' ...

  6. 如何调整cookie的生命周期

    一.什么是cookie 形象比喻成“网络身份证” 指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). (1)记录信息的盒子(2)识别每一个网络用户的证件 ...

  7. Laravel ---【转】PhpStorm下Laravel代码智能提示

    [转]http://blog.csdn.net/pangchengyong0724/article/details/54706775 第一步:在项目的composer.json中添加如下一行 &quo ...

  8. 上手更快的网络文件系统 —— oxfs

    什么时候需要网络文件系统? 做嵌入式的同学经常会使用 NFS 讲 host 上的某个目录挂载到开发板上,方便 host 上编译构建后能直接在板子上运行,减少手工拷贝操作. 网站开发时,在 host 上 ...

  9. java创建对象的方式

    Java中创建对象的5种方式 作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有5种 ...

  10. docker search/pull 报错

    docker报错 Get https://registry-1.docker.io/v2/: x509: certificate has expired or is not yet valid 这种错 ...