「SCOI2011」糖果
蒟蒻又回来写题解了。。。
题面
幼儿园里有 N 个小朋友, lxhgww 老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。
但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候, lxhgww 需要满足小朋友们的 K 个要求。
幼儿园的糖果总是有限的, lxhgww 想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友们所有的要求。
输入格式
输入的第一行是两个整数 N, K 。
接下来 K 行,表示这些点需要满足的关系,每行 33 个数字, x , A , B 。
如果 X=1 .表示第 A 个小朋友分到的糖果必须和第 B 个小朋友分到的精果一样多。
如果 X=2 ,表示第 A 个小朋友分到的糖果必须少于第 B 个小朋友分到的糖果。
如果 X=3 ,表示第 A 个小朋友分到的糖果必须不少于第 B 个小朋友分到的糖果。
如果 X=4 ,表示第 A 个小朋友分到的糖果必须多于第 B 个小朋友分到的糖果。
如果 X=5 ,表示第 A 个小朋友分到的糖果必须不多于第 B 个小朋友分到的糖果。
输出格式
输出一行,表示 lxhgww 老师至少需要准备的糖果数,如果不能满足小朋友们的所有要求,就输出 -1。
思路
神仙题(不是思路,而是卡时神仙。。。)
不过还是先看思路。。。
由x==1时可得A==B,就是两边相等,建一条a到b权为0的双向边。
由x==2时可得A<B,所以要让A+x(x>=1)>B,建一条a到b权为1的单向边。
由x==3时可得A>=B,所以要让B+x(x>=0)>=A,建一条b到a权为0的单向边。
由x==4时可得A>B,所以要让B+x(x>=1)>A,建一条b到a权为1的单向边。
由x==5时可得A<=B,所以要让A+x(x>=0)>=B,建一条a到b权为0的单向边。
然后根据不等式同大取大,跑个SPFA最长路(顺便判个环)就行了(然后没A)。
???
万一x==2||x==4时A==B呢?你还要再跑一遍???直接特判cout<<-1<<endl;return 0;
万一爆int呢?开long long吧
万一。。。这个真没想到。。。
先看一下90分代码
// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;
];
],cnt=,N,K;
];
],tot[];
inline long long read() {
,f=;char ch=getchar();
') {if (ch=='-') f=-f;ch=getchar();}
+ch-',ch=getchar();
return ret*f;
}
void add(long long a,long long b,long long c)
{
Edge[++cnt].next=head[a];
Edge[cnt].to=b;
Edge[cnt].dis=c;
head[a]=cnt;
}
void SPFA(long long s)
{
;i<=N;i++) vis[i]=,dis[i]=-2e9,tot[i]=;
queue<int> q;
q.push(s); vis[s]=; dis[s]=; tot[s]++;
while(!q.empty())
{
long long u=q.front();
q.pop();
vis[u]=;
for (long long i=head[u];i;i=Edge[i].next)
{
long long v=Edge[i].to;
if (dis[v]<dis[u]+Edge[i].dis)
{
dis[v]=dis[u]+Edge[i].dis;
;
else if (tot[v]>=N)
{
cout<<-<<endl;
exit();
return;
}
}
}
}
}
int main()
{
N=read();K=read();
;i<=K;i++)
{
long long X,A,B;
X=read();A=read();B=read();
) add(A,B,),add(B,A,);
)
<<endl;;}
);
) add(B,A,);
)
<<endl;;}
);
) add(A,B,);
}
;
;i<=N;i++) add(s,i,);
SPFA(s);
;
;i<=N;i++) ans+=dis[i];
cout<<ans<<endl;
;
}
再看一下100代码
#include<bits/stdc++.h>
using namespace std;
];
],cnt=,N,K;
];
],tot[];
inline long long read() {
,f=;char ch=getchar();
') {if (ch=='-') f=-f;ch=getchar();}
+ch-',ch=getchar();
return ret*f;
}
void add(long long a,long long b,long long c)
{
Edge[++cnt].next=head[a];
Edge[cnt].to=b;
Edge[cnt].dis=c;
head[a]=cnt;
}
void SPFA(long long s)
{
;i<=N;i++) vis[i]=,dis[i]=-,tot[i]=;
queue<long long> q;
q.push(s); vis[s]=; dis[s]=; tot[s]++;
while(!q.empty())
{
long long u=q.front();
q.pop();
vis[u]=;
for (long long i=head[u];i;i=Edge[i].next)
{
long long v=Edge[i].to;
if (dis[v]<dis[u]+Edge[i].dis)
{
dis[v]=dis[u]+Edge[i].dis;
;
else if (tot[v]>=N)
{
cout<<-<<endl;
exit();
return;
}
}
}
}
}
int main()
{
N=read();K=read();
;i<=K;i++)
{
long long X,A,B;
X=read();A=read();B=read();
) add(A,B,),add(B,A,);
)
{
<<endl;;}
);
}
) add(B,A,);
)
{
<<endl;;}
);
}
) add(A,B,);
}
;
;i--) add(s,i,);//神仙优化,看到就是赚到
SPFA(s);
;
;i<=N;i++) ans+=dis[i];
cout<<ans<<endl;
;
}
。。。等待dalao解答
「SCOI2011」糖果的更多相关文章
- 「WC2013」糖果公园
「WC2013」糖果公园 传送门 树上带修莫队板子题. 看懂题意后就是板子题了. 参考代码: #include <algorithm> #include <cstdio> #i ...
- LG2512/BZOJ1045 「HAOI2008」糖果传递 中位数
问题描述 LG2512 BZOJ1045 题解 这是一个链状问题的环状版本. 问题最终变为给定数轴上的\(n\)个点,找出一个到他们的距离之和尽量小的点,而这个点就是这些数中的中位数. 网络流24题的 ...
- 「SCOI2011」棘手的操作
传送门 Description 有\(N\)个节点,标号从\(1\)到\(N\),这\(N\)个节点一开始相互不连通.第$ i\(个节点的初始权值为\)a_i$ ,接下来有如下一些操作: U x y ...
- 「译」JUnit 5 系列:条件测试
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...
- 「译」JUnit 5 系列:扩展模型(Extension Model)
原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...
- JavaScript OOP 之「创建对象」
工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...
- 「C++」理解智能指针
维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...
- 「JavaScript」四种跨域方式详解
超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...
- 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management
写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...
随机推荐
- iOS RSA的加密和签名
1.RSA加密使用服务端给的公钥.pem,RSA签名使用客户端的私钥.pem. 参考文章:http://www.jianshu.com/p/4580bee4f62f 把文件夹导入项目中,然后配置这两个 ...
- pgm8
前面的近似策略是寻找了 energy functional 的近似,该近似导致了 LBP,这使得 message passing 的算法不变.近似使用 I-projection,尽管这个一般说来并不容 ...
- Day23-Model操作,Form操作和序列化操作
参考源出处:http://blog.csdn.net/fgf00/article/details/54629502 1. 搭建环境请参考:http://www.cnblogs.com/momo8238 ...
- idea问题总结记录
1.部署tomcat后,tomcat日志报错:java.lang.ClassNotFoundException 1.1 原因: tomcat虽然部署成功,但是并没有把本项目中访问服务器所需的类库加到W ...
- 解题:HAOI 2015 按位或
题面 Min-Max容斥:对于集合S $min(S)=\sum_{s∈S}(-1)^{|s|+1}max(s)$ $max(S)=\sum_{s∈S}(-1)^{|s|+1}min(s)$ 那么这个题 ...
- CF1027E Inverse Coloring
题意:n × n的矩阵,每个位置可以被染成黑/白色. 一种gay的染色是任意相邻两行的元素,每两个要么都相同,要么都不同.列同理. 一种gaygay的染色是一种gay的染色,其中没有哪个颜色的子矩阵大 ...
- Strassen矩阵乘法之思考
可不可以有另外的划分小矩阵的方法? A*B=C A/B分成n*m个矩阵 可看成一个多元方程. Ci,k = Ai,j * Bjk 每一个Ci,k看成方程的一个未知数 每一个小式子:对于A或B同一列/行 ...
- 在android手机上通过Html5Plus调用java类。
关于html5plus的资料参考http://www.html5plus.org/ 最近通过html5做手机app,其中涉及到网络通过,必须采用原生的socket,websocket无法满足要求,ht ...
- bzoj千题计划207:bzoj1879: [Sdoi2009]Bill的挑战
http://www.lydsy.com/JudgeOnline/problem.php?id=1879 f[i][j] 表示匹配了i个字符,匹配字符串的状态为j的方案数 枚举下一个字符是什么 计算加 ...
- Linux之svn数据备份、还原及迁移
前言 因管理需求现要将svn数据进行备份,作为运维小哥的我在收到指令后进行了相关操作.当然,领导告知的是要备份,但作为一个有思想的运维,我考虑到的是自己要干的不仅仅是备份操作,还要确保在备份后数据还原 ...